マウスダウン メッセージへの応答
マウスダウン メッセージとキーダウン メッセージの処理 への移動
MouseDown メソッドは、コントロールの OnMouseDown イベント用の protected メソッドです。コントロール自身が、Windows のマウスダウン メッセージに応答して MouseDown メソッドを呼び出します。継承した MouseDown メソッドをオーバーライドする場合は、OnMouseDown イベントの呼び出しに加えて、他の応答を行うコードも含めることができます。
MouseDown メソッドをオーバーライドするには、次のように、MouseDown メソッドを TDBCalendar クラスに追加します。
type TDBCalendar = class(TSampleCalendar); . . . protected procedure MouseDown(Button: TButton, Shift: TShiftState, X: Integer, Y: Integer); override; . . . end; procedure TDBCalendar.MouseDown(Button: TButton; Shift: TShiftState; X, Y: Integer); var MyMouseDown: TMouseEvent; begin if not ReadOnly and FDataLink.Edit then inherited MouseDown(Button, Shift, X, Y) else begin MyMouseDown := OnMouseDown; if Assigned(MyMouseDown then MyMouseDown(Self, Button, Shift, X, Y); end; end;
//header file class PACKAGE TDBCalendar : public TSampleCalendar { . . . protected: virtual void __fastcall MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y); . . . };
//implmentation file void __fastcall TDBCalendar::MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y) { TMouseEvent MyMouseDown; // declare event type if (!FReadOnly && FDataLink->Edit()) // if the field can be edited TSampleCalendar::MouseDown(Button, Shift, X, Y); // call the inherited MouseDown else { MyMouseDown = OnMouseDown; // assign OnMouseDown event if (MyMouseDown != NULL) MyMouseDown(this, Button, // execute code in the... Shift, X, Y); // ...OnMouseDown event handler } }
MouseDown メソッドがマウスダウン メッセージに応答するとき、継承した MouseDown メソッドが呼び出されるのは、コントロールの ReadOnly プロパティが False でデータ リンク オブジェクトが編集モードになっている(つまり、フィールドを編集できる)場合だけです。フィールドを編集できない場合は、OnMouseDown イベント ハンドラに記述されたコードがあれば、それが実行されます。