3

ピクセル単位でカレットの位置を変更する方法はありますか?

マウスを動かすたびにケアPOSを動かしたいです。

お気に入り:

Onmousemove:MoveCaretPos(X、Y);

4

1 に答える 1

7

いいえ、キャレットの位置を特定のポイントに設定することはできません。代わりに、キャレットを文字位置に設定する必要があります。これを行うには、EM_CHARFROMPOSメッセージを使用して指定したポイントに最も近い文字を取得し、返された値をSelStartプロパティに設定する必要があります。

このサンプルを確認してください

procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
 APoint  : TPoint;
 Index   : Integer;
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;
于 2011-06-01T07:14:42.710 に答える