mouseenter mouseleave


ビギナビギナ  2007-01-17 04:05:37  No: 24491  IP: 192.*.*.*

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

編集 削除
ビギナビギナ  2007-01-17 07:18:05  No: 24492  IP: 192.*.*.*

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

編集 削除
AL  2007-01-18 00:14:02  No: 24493  IP: 192.*.*.*

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

編集 削除
ビギナビギナ  2007-01-18 16:17:11  No: 24494  IP: 192.*.*.*

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

編集 削除
Fusa  2007-01-18 18:08:32  No: 24495  IP: 192.*.*.*

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

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

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

編集 削除
えーと  2007-01-19 00:27:57  No: 24496  IP: 192.*.*.*

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

編集 削除