2017-03-06 13 views
1

私のアプリケーション内の非アクティブなフォーム上のユーザーがクローズボタンをクリックしたかどうかを検出したいと思います。フォームのクローズボタンでマウスがホバーすると検出できますので、フォームが閉じられているときにそのデータを使用できますか?Delphiフォームのクローズボタン上にマウスがあるかどうかを検出します

+0

私のアプリケーションのフォームを意味します –

答えて

6

WM_NCHITTESTメッセージをlParam値のマウスの画面座標を渡して送信することができます。戻り値がHTCLOSEの場合、マウスは閉じるボタンの上にあります。

ただし、マウスが[閉じる]ボタンを超えているという理由だけで、ユーザーが実際にボタンをクリックしたことが保証されるわけではありません。例えば、ユーザーがボタンの上にマウスを移動することができ、その後、代わりにキーボードの上にのAlt + F4を入力(またはAltキー+スペースCloseオプションにある下向き矢印、およびは同じアクションを起動を、Enterキーを押しますAlt + F4)。

閉じる]ボタンをクリック、またはキーボードショートカットを使用しているかどうか、同じWM_CLOSEメッセージが(フォームのOnCloseQueryOnCloseイベントをトリガする)ウィンドウに送信され、そしてウィンドウが閉じられているなぜそれがを報告しません。

差別化が必要な場合は、フォームにWM_NCLBUTTONDOWN/WM_NCLBUTTONUPWM_SYSCOMMANDのウィンドウメッセージを処理させることができます。閉じるボタンをクリックしてウィンドウを閉じると、WM_CLOSEの前にWM_NCLBUTTON...があり、wParamHTCLOSEに設定されます。キーボードショートカットでウィンドウを閉じるときは、WM_CLOSEの前にWM_SYSCOMMANDがあり、wParamSC_CLOSEに設定されます。

+0

私のために働いてくれてありがとう、ありがとう –

関連する問題