リッチエディットコントロールのカーソル位置がマウスクリック位置になるようにするには?

解決


ポント  2003-10-09 03:31:17  No: 5161

とても的外れのようなことかもしれないので、申し訳ありませんが、今、Unit1とUnit2のフォームを作成して、Unit1に文字列が詰っているリッチエディットコントロールを配置しました。そして、Unit1のコードからUnit2をモードレスで表示しました。このとき、Unit2にフォーカスがあり、Unit1のリッチエディットコントロールをそのまま直接、マウスでクリックすると、Unit1のフォームは、フォーカスを持ってUnit2のフォームはUnit1の下にきますが、リッチエディットコントロールのカーソル位置は、マウスでクリックした位置にはこずに、前回の位置のままになってしまいます。なので、カーソル位置を変えるため、もう一度リッチエディットコントロールをクリックしなくてはならないのですが、このそのまま直接、フォーカスのないリッチエディットコントロールをクリックしても、クリックした位置にカーソルがくるようにするには、どのようなことをすればよいのですか? 表現が下手で申し訳ありませんが、ご教授よろしくお願いします。


にしの  2003-10-09 06:35:26  No: 5162

こんな感じでしょうか。

procedure TForm1.FormActivate(Sender: TObject);
var
  mpos: TPoint;
begin
  GetCursorPos(mpos);
  mpos := RichEdit1.ScreenToClient(mpos);
  RichEdit1.Perform(WM_LBUTTONDOWN, 1, MakeLParam(mpos.X, mpos.Y));
end;

ちなみに、
  RichEdit1.Perform(WM_LBUTTONDOWN, 1, MakeLParam(mpos.X, mpos.Y));
は、
  RichEdit1.Perform(WM_LBUTTONDOWN, 0, 0);
でもOKでした。
たぶん、WM_LBUTTONDOWNメッセージで、マウスの状態を取得しているんだと思います。


ポント  2003-10-10 23:41:47  No: 5163

ありがとうございます。うまくいきました。
(とてもよくわかりました。自分では、とても思いつかない発想の解決策ですね。勉強になりました。)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加