初めて書き込ませていただきます。お知恵を拝借できたらと...
画面に2つのウインドウが開いていると仮定します。例えば左半分にエクセル右半分にForm1とします。マウスを移動させてForm1上にポインタが入るとForm1がアクティブに、エクセル上に入るとエクセルがアクティブになるようにしたいのです。この場合Form1.mouseenterもしくはForm1.mouseleaveイベントハンドらに処理を記述すれば解決しますが、もしForm1の上に色々なコンポーネントが乗っかっていたらどうでしょう?例えばPane11がalign := clClientで乗っかっていようものなら上記イベントは発生しなくなってしまいます。Form1上の全てのコンポーネントがForm1.mouseenterの発生をを知るようには出来ないものでしょうか?もしくは発想を変えたほうがいいでしょうか?よろしくお願いします。
追加質問です。上記の条件で、もしForm1上に何もコントロールがなかったとしても、Form1の最上部のメニューバー上ではmouseenterは発生しません。またForm1にメニュー(TMainMenu)がついていた場合もmouseenterは発生しないと思います。これらも併せて妙案いただけませんでしょうか。
SetWindowsHookExを利用してはいかがですか?
なるほどフックするんですね。恥ずかしながら現在TTimerで割り込みを掛けており物凄いオーバーヘッドなんです。ちょっと実験しますんで報告はしばし...
MouseCaptureを定義して全部のイベントが
Formにくるように。
ってできないでしょうか?
すいません、試してないんですが。
それって、Application.OnMessage じゃないの
ツイート | ![]() |