mouseenter mouseleave


ビギナビギナ  2007-01-17 13:05:37  No: 24491

初めて書き込ませていただきます。お知恵を拝借できたらと...
画面に2つのウインドウが開いていると仮定します。例えば左半分にエクセル右半分にForm1とします。マウスを移動させてForm1上にポインタが入るとForm1がアクティブに、エクセル上に入るとエクセルがアクティブになるようにしたいのです。この場合Form1.mouseenterもしくはForm1.mouseleaveイベントハンドらに処理を記述すれば解決しますが、もしForm1の上に色々なコンポーネントが乗っかっていたらどうでしょう?例えばPane11がalign := clClientで乗っかっていようものなら上記イベントは発生しなくなってしまいます。Form1上の全てのコンポーネントがForm1.mouseenterの発生をを知るようには出来ないものでしょうか?もしくは発想を変えたほうがいいでしょうか?よろしくお願いします。


ビギナビギナ  2007-01-17 16:18:05  No: 24492

追加質問です。上記の条件で、もしForm1上に何もコントロールがなかったとしても、Form1の最上部のメニューバー上ではmouseenterは発生しません。またForm1にメニュー(TMainMenu)がついていた場合もmouseenterは発生しないと思います。これらも併せて妙案いただけませんでしょうか。


AL  2007-01-18 09:14:02  No: 24493

SetWindowsHookExを利用してはいかがですか?


ビギナビギナ  2007-01-19 01:17:11  No: 24494

なるほどフックするんですね。恥ずかしながら現在TTimerで割り込みを掛けており物凄いオーバーヘッドなんです。ちょっと実験しますんで報告はしばし...


Fusa  2007-01-19 03:08:32  No: 24495

MouseCaptureを定義して全部のイベントが
Formにくるように。

ってできないでしょうか?

すいません、試してないんですが。


えーと  2007-01-19 09:27:57  No: 24496

それって、Application.OnMessage じゃないの


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

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






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