マウスダウン メッセージへの応答

提供: RAD Studio
移動先: 案内検索

マウスダウン メッセージとキーダウン メッセージの処理 への移動


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 イベント ハンドラに記述されたコードがあれば、それが実行されます。

関連項目