Как установить позицию каретки правым кликом мышки для TRichEdit? - PullRequest
0 голосов
/ 21 мая 2018

Когда я щелкаю правой кнопкой мыши слово в элементе управления RichEdit, я хочу, чтобы курсор располагался внутри этого слова так, как это происходит при щелчке левой кнопкой мыши.

Возможно ли достичь?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Я нашел другое решение здесь, на Stackoverflow.Ниже приведен слегка измененный код из https://stackoverflow.com/a/6197549/3986609 от RRUZ.

procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer);
var
    APoint  : TPoint;
    Index   : Integer;
begin
    if Button = mbRight then
    begin
        APoint := Point(X, Y);
        Index :=  SendMessage(TRichEdit(Sender).Handle,EM_CHARFROMPOS, 0, Integer(@APoint));
        if Index<0 then Exit;
        TRichEdit(Sender).SelStart:=Index;
    end;
end;
0 голосов
/ 21 мая 2018

Просто используйте событие ContextPopup и имитируйте щелчок левой кнопкой мыши

type    
    TForm1 = class(TForm)
    edtRich: TRichEdit;
    procedure edtRichContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
  end;

implementation

procedure TForm1.edtRichContextPopup(Sender: TObject; MousePos: TPoint; 
    var Handled: Boolean);
begin
  mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN,
              MousePos.x, MousePos.y, 0, 0);
  mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP,
              MousePos.x, MousePos.y, 0, 0);
end;
...