Как узнать положение курсора в TMemo и TRichEdit

Тема в разделе "Delphi", создана пользователем WinHack, 24 ноя 2016.

  1. WinHack
    Компоненты TMemo и TRichEdit не располагают никаким свойством или методом, которые облегчали бы указание положения курсора в этих компонентах. Это можно сделать посредством функции SendMessage. Для выполнения следующего кода поместите TRichEdit, TButton и три TLabel. При выполнении этого кода и при нажатии кнопки, в TLabel будут отображаться номер строки, длина строки и положение курсора.

    Код:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      LPos,CPos,LineLenght: integer;
    begin
      Lpos:= SendMessage(RichEdit1.Handle,
        EM_LINEFROMCHAR, RichEdit1.Selstart, 0);
      CPos:= SendMessage(RichEdit1.handle,
        EM_LINEINDEX, lpOS, 0);
      LineLenght:= SendMessage(RichEdit1.HANDLE,
        EM_LINELENGTH, CPos, 0);
      CPos:= RichEdit1.Selstart-CPos;
    
      Label1.Caption:= IntToStr(Lpos);
      Label2.Caption:= IntToStr(LineLenght);
      Label3.Caption:= IntToStr(Cpos);
    end;
    Данный пример показан для компонента TRichEdit. В случае с TMemo нужно заменить соответственно RichEdit на Memo.