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

解決


ポント  2003-10-11 23:32:43  No: 5180

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

という質問で、

> 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メッセージで、マウスの状態を取得しているんだと思います。

というご教授をしていただきました。結果、実現したかったことが大変うまく動作していて、前回はどうもありがとうございました。

少し使いつづけていたところ、同じアプリケーションの間での、フォームのフォーカスの移動の際には、フォーカスのないリッチエディットコントロールをクリックしても、クリックした位置にカーソルがくるようになりましたが、他アプリケーションからのフォーカスの移動の際には、FormActivateイベントが発生しないため、クリックした位置にカーソルがきませんでした。
他アプリケーションからのフォーカスの移動の際に発生するイベントにも、ご教授いただいたチップスを書き込めばよいのですが、他アプリケーションからのフォーカスの移動の際に発生するイベントが見当たらず、埒があきませんでした。このような場合はどのようにしたら良いのですか? 

どうかご教授お願いします。


にしの  2003-10-11 23:53:43  No: 5181

ヘルプをよく読みましたか?
FormのOnActivateの説明を見ればわかるはずです。


ポント  2003-10-12 05:13:00  No: 5182

ヘルプをよく検索せずにご質問してしまって、申し訳ありませんでした。FormのOnActivateの説明から、よく読み進めていったところ、実装することが出来ました。「ApplicationEvents」コントロールを使用すればよいわけですね。このコントロールの存在すら知らなくて、勉強になりました。ありがとうございました。


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

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






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