Установка каретки в RichEdit

Материал из DRKB

Установка каретки в RichEdit[править | править код]

Узнать положение курсора в RichEdit не составляет труда (richedit.GetCaret). А вот как установить каретку в нужное место?

procedure SetLine(WhichEdit: TRichedit; Linepos, charpos: Integer);
begin
  with WhichEdit do
  begin
    SelStart := Perform(EM_LineIndex, LineNum, 0) + charpos;
    Perform(EM_ScrollCaret, 0, 0);
  end;
end;


Комментарии: Если Вам не нужно, чтобы происходил скроллинг к позиции каретки, то EM_ScrollCaret можно убрать. Эта процедура так же может быть использована для TMemo, только надо будет заменить объявление witchedit на TMemo:

 procedure CustomMemoSetline(WhichEdit: TCustomMemo; Linepos, charpos: Integer);

Так же эту процедуру можно использовать как ответ на вопрос "Как установить фокус на определённую строку в компоненте Memo ?". Для этого необходимо добавить следующий код после строки selstart:

 sellength := Length(Lines(line));

И установить charpos в 0.

RichEdit должен иметь фокус, иначе em_ScrollCaret не сработает.


Source: Взято из http://forum.sources.ru
ID: 00567



// You can move the caret in a TRichEdit component by using this code : 
procedure RichEdit_MoveTo(RichEdit: TRichEdit; LineNumber, CharNumber: Word);
begin
  RichEdit.SelStart := RichEdit.Perform(EM_LINEINDEX, LineNumber, 0) + CharNumber);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit_MoveTo(RichEdit1, 2, 5);
  Application.ProcessMessages;
  RichEdit1.SetFocus;
end;


Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01016