Delphi - Sacar el foco de un TMemo según la última línea

 
Vista:

Sacar el foco de un TMemo según la última línea

Publicado por Kikecg (33 intervenciones) el 30/07/2006 19:31:16
Hola, buenas a tod@s.

Estoy realizando una serie de formularios para introducción de datos. En los campos de tipo Memo me encuentro con el siguiente problema:

Necesito que el foco pase al siguiente componente sólo si la línea anterior a la que se encuentra el cursor está vacía.

Es decir, si escribo

hola

y pulso enter, obtengo un salto de línea que me permite seguir erscribiendo en el memo.

Si pulso Enter de nuevo, sin haber escrito nada en la últioma línea, necesito que el cursor pase al siguiente componente, pero sólo en ese caso. Si, por ejemplo estoy escribiendo y retrocedo una serie de líneas, no quiero que el foco pase a otro componente si inserto un salto de línea.

No se si me he explicado claramente.

Estoy probando con

Linea := SendMessage((Sender as TcxMemo).Handle, EM_LINEFROMCHAR, (Sender as TcxMemo).SelStart, 0);
if (Sender as TcxMemo).Lines[Linea - 1] = '' then
SelectNext(ActiveControl, getkeystate(VK_SHIFT) and $80 = 0, True);

pero no funciona por que en Linea siempre me devuelve el valor 0.

Debo aclarar que utilizo una misma función para varios campos TcxMemo, de ahí que utilice Sender en la función en lugar del componente en si. No se si esto tiene que ver o no.

Lo cierto es que este código, o uno muy parecido, me ha funcionado en otras ocasiones, pero no consigo encontrar donde lo utilicé hace poco, por lo que me veo atascado de la manera mas tonta.

Si alguien tiene alguna sugerencia de como hacer lo que necesito, será muy agradecida.

Gracias a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sacar el foco de un TMemo según la última línea

Publicado por Dr Juzam (821 intervenciones) el 30/07/2006 22:13:19
Creo que esto funcionará:

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
if TMemo(Sender).Lines[TMemo(Sender).Lines.Count-1]='' then
Form1.SelectNext(TMemo(Sender), True, true);
end;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sacar el foco de un TMemo según la última línea

Publicado por kikecg (33 intervenciones) el 31/07/2006 14:56:51
Hola.

Pues si, muchas gracias, así si que funciona. Habrá que comprobar que las líneas no sean 0, etc... pero si que funciona.

Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar