API:Vcl.ExtCtrls.TImage.OnMouseActivate
Delphi
property OnMouseActivate: TMouseActivateEvent read FOnMouseActivate write FOnMouseActivate;
C++
__property OnMouseActivate;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
event | published | Vcl.ExtCtrls.pas Vcl.ExtCtrls.hpp |
Vcl.ExtCtrls | TImage |
説明
マウス ポインタがコントロール上にあり、その親フォームがアクティブでない場合に、ユーザーが左マウス ボタンを押すと発生します。
Vcl.ExtCtrls.TImage.OnMouseActivate は Vcl.Controls.TControl.OnMouseActivate を継承しています。以下の内容はすべて Vcl.Controls.TControl.OnMouseActivate を参照しています。
マウス ポインタがコントロール上にあり、その親フォームがアクティブでない場合に、ユーザーが左マウス ボタンを押すと発生します。
OnMouseActivate イベント ハンドラを使用すると、親のトップレベルのフォームがアクティブでないときに、コントロール上でマウス ボタンを押した結果として発生するべき特別な処理を実装することができます。
イベント タイプは次のとおりです:
TMouseActivateEvent = procedure (Sender: TObject; Button: TMouseButton; ShiftState: TShiftState; X, Y: Integer; HitTest: Integer; var MouseActivate: TMouseActivate) of object;
コントロールがクリックされたときに親のトップレベルのフォームがアクティブでない場合、マウス カーソルが上にあるコントロールに対して、このイベントが発生します。 MouseActivate は、TControl の protected 仮想関数です。 MouseActivate は、カスタム コントロールの下位クラスで上書きすることにより、OnMouseActivate イベントの特殊な埋め込み処理を提供することができます。 MouseActivate のデフォルト値を maDefault
のままにしている場合、親コントロールは OnMouseActivate イベントを発生させ、トップレベルのフォームまですべて、処理を繰り返します。 このチェーン内のどのコントロールも、MouseActivate の値を設定しなかった場合、その振る舞いは、コントロールが TMouseActivate を maActivate
に設定したのと同じになります。 どの時点でも、コントロールは TMouseActivate の値を設定でき、親の処理を停止できます。
一部のコントロールは、ボタンが押下されたメッセージを受け取ると、自分自身にフォーカスを設定します。このため、場合により、maNoActivate を設定しても効果が表れないこともあります。 たとえば、TButton コントロールは、TMouseActivate が maNoActivate に設定されていようとなかろうと、WM_LBUTTONDOWN メッセージ内で、自分自身にフォーカスを設定します。 この場合、maNoActivateAndEat の設定は作用します。トップレベルのフォームがアクティブになっていないため、WM_LBUTTONDOWN メッセージが抑制されるからです。
HitTest パラメータは、WM_NCHITTEST メッセージから取得したヒット テスト値です。 有効な値とそれぞれの意味については、Windows.pas を参照してください。 大抵の場合、この値は HTCLIENT になり、ユーザーがコントロールのクライアント領域をクリックしたことを意味します。 しかしトップレベルのフォームの場合、HTCAPTION や HTBOTTOM など、別の値を取る場合があります。 これにより、HitTest コードに基づき、MouseActivate にどの値を設定するのかを決定するコードを記述することができます。 たとえば、以下は TFrom に対する OnMouseActivate イベント ハンドラ内のコードで、フォームをアクティブにするため、ユーザーに非クライアント領域をクリックさせます:
if HitTest = HTCLIENT then MouseActivate := maNoActivateAndEat;
このイベントが、Windows が WM_MOUSEACTIVATE をどのように処理するかに関係していたとしても、このメッセージの実際の処理は、コントロールがウィンドウ ハンドルをまだ持っていない VCL 階層内の時点、TControl レベルで行われます。 その後、すべての TControl 下位クラスもまた、OnMouseDown、OnMouseMove、OnMouseUp イベントを持っているため、OnMouseActivate イベントがシミュレートされます。 本情報は、VCL Win32 および VCL.NET の両方に該当します。