新しいメッセージ処理メソッドの宣言

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

新しいメッセージ ハンドラの作成 への移動


新しいメッセージ処理メソッドを宣言する必要がある状況が 2 種類あります。

  • 標準コンポーネントで処理されていない Windows メッセージをユーザーのコンポーネントで、処理する必要がある場合。
  • ユーザーのコンポーネントで使用する独自のメッセージを定義した場合。

メッセージ処理メソッドを宣言するには、次のとおり実行します。

  1. procedure メソッドを宣言します(コンポーネントのクラス宣言で適切な protected または private 部分)。
  2. 処理するメッセージの後に適切なメソッドの名前を指定します(下線は使用不可)。
  3. 単一の var パラメータ Message(TMessage 型)を渡します。
  4. procedure 宣言の最後に message 指令を追加します。このメソッドが処理するメッセージのコードを指定します。
  1. C++ を使用している場合は、メソッド宣言の直後に次の構文で、メッセージ マッピングも作成する必要があります。

    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(msgCode, msgType, msgHandler)
    END_MESSAGE_MAP
    

    msgCode パラメータは、メソッドが処理するメッセージのコードを表します。 msgType パラメータは、メソッドの var パラメータの型を表しており、通常 TMessage となります(ステップ 3 参照)。最後の msgHandler パラメータは、ハンドラ メソッドの名前を表しており、プロシージャの名前を同じになります。

  2. メッセージ メソッド実装内で、コンポーネントに特化した任意の処理コードを記述します。

  3. 継承メッセージ ハンドラを呼び出します(祖先のメッセージ処理メソッドにより該当イベントも処理する場合)。

    メモ: 個別のメッセージを処理するには、var パラメータの型も、TWMKey、TWMMouse、TWMPaint、TWMMenuChar、TWMNotify、または TWMLButtonDown のいずれかであることが必要です。

    メモ: message 指令とともに使用する、すべての事前定義メッセージ コードの完全なリストについては、Messages ユニットの定数リストを参照してください。 新しいメッセージの種類を作成することもできます。「独自のメッセージの定義」を参照してください。

    新しいメッセージ処理メソッドの宣言の詳細は、「メソッド」ページの「メッセージ メソッド」セクションを参照してください。

以下に示すのは、CM_CHANGECOLOR というユーザー定義メッセージのメッセージ ハンドラの宣言です。

 const
   CM_CHANGECOLOR = WM_APP + 400;
 type
   TMyComponent = class(TControl)
   .
   .
   .
 protected
   procedure CMChangeColor(var Message: TMessage); message CM_CHANGECOLOR;
 end;
 
 procedure TMyComponent.CMChangeColor(var Message: TMessage);
 begin
   { set color from long parameter }
   Color := Message.lParam;
 
   { call the inherited message handler }
   inherited;
 end;
 #define CM_CHANGECOLOR (WM_APP + 400)
 
 class TMyControl : public TControl
 {
 .
 .
 .
 protected:
   void __fastcall CMChangeColor(TMessage &Message);
   BEGIN_MESSAGE_MAP
     MESSAGE_HANDLER(CM_CHANGECOLOR, TMessage, CMChangeColor)
   END_MESSAGE_MAP(TControl)
 };

 
 void __fastcall TMyControl::CMChangeColor(TMessage &Message)
 {
   // set color from long parameter
   Color = Message.LParam;
 
   // call the inherited message handler
   TControl::CMChangeColor(Message);
 }

関連項目