Prueba esta rutina:
Código Delphi
[-]
procedure MoveCaret(Memo: TMemo; Row, Col: Integer);
var
LineIndex: Integer;
LineLength: Integer;
begin
LineIndex := Memo.Perform(EM_LINEINDEX, Row, 0);
if LineIndex = -1 then
Memo.SelStart := Length(Memo.Text)
else
begin
LineLength := Memo.Perform(EM_LINELENGTH, LineIndex, 0);
if Col > LineLength then Col := LineLength;
Memo.Perform(EM_SETSEL, LineIndex + Col, LineIndex + Col)
end;
Memo.Perform(EM_SCROLLCARET, 0, 0);
end;
Al procedimiento le pasas el Memo donde quieres mover el cursor (caret). Si Row es mayor que el número de líneas del memo el cursor se va hasta el final del memo y si Col es mayor que el número de caracteres en el renglón especificado entonces el cursor se mueve al final de dicha línea.
Tanto Row como Col están basados en cero, esto es, el primer renglón es el 0 y la primera colmna es la 0.
// Saludos