メッセージのトラップ

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

メッセージ処理の変更 への移動


ある状況下では、コンポーネントでメッセージを無視した方がよい場合があります。 つまり、コンポーネントがメッセージを自分のハンドラにディスパッチしないようにするわけです。 メッセージをトラップするには、仮想メソッド WndProc をオーバーライドします。

VCL コンポーネントの場合、WndProc メソッドでは、メッセージを選別してから Dispatch メソッドに渡します。Dispatch メソッドでは、メッセージを処理できるメソッドを決定します。コンポーネントでは、WndProc をオーバーライドすることにより、ディスパッチする前にメッセージを選別する機会が得られます。TWinControl から派生したコントロールの場合、WndProc のオーバーライドは次のようなコードになります。

procedure TMyControl.WndProc(var Message: TMessage);
begin
  { tests to determine whether to continue processing }
  inherited WndProc(Message);
end;
void __fastcall TMyControl::WndProc(TMessage& Message)
{
   // tests to determine whether to continue processing
if(Message.Msg != WM_LBUTTONDOWN)

}

TControl コンポーネントでは、ユーザーがコントロールをドラッグ アンド ドロップしているときに除外されるマウス メッセージがすべて定義されています。WndProc をオーバーライドすることは、次の 2 点で役に立ちます。

  • メッセージごとにハンドラを指定しなくても、一定範囲のメッセージを除外できる。
  • メッセージのディスパッチを完全に阻止して、ハンドラが決して呼び出されないようにすることができる。