新しいメッセージ処理メソッドの宣言
新しいメッセージ ハンドラの作成 への移動
新しいメッセージ処理メソッドを宣言する必要がある状況が 2 種類あります。
- 標準コンポーネントで処理されていない Windows メッセージをユーザーのコンポーネントで、処理する必要がある場合。
- ユーザーのコンポーネントで使用する独自のメッセージを定義した場合。
メッセージ処理メソッドを宣言するには、次のとおり実行します。
- procedure メソッドを宣言します(コンポーネントのクラス宣言で適切な protected または private 部分)。
- 処理するメッセージの後に適切なメソッドの名前を指定します(下線は使用不可)。
- 単一の var パラメータ Message(TMessage 型)を渡します。
- procedure 宣言の最後に message 指令を追加します。このメソッドが処理するメッセージのコードを指定します。
C++ を使用している場合は、メソッド宣言の直後に次の構文で、メッセージ マッピングも作成する必要があります。
BEGIN_MESSAGE_MAP MESSAGE_HANDLER(msgCode, msgType, msgHandler) END_MESSAGE_MAP
msgCode パラメータは、メソッドが処理するメッセージのコードを表します。 msgType パラメータは、メソッドの var パラメータの型を表しており、通常 TMessage となります(ステップ 3 参照)。最後の msgHandler パラメータは、ハンドラ メソッドの名前を表しており、プロシージャの名前を同じになります。
メッセージ メソッド実装内で、コンポーネントに特化した任意の処理コードを記述します。
継承メッセージ ハンドラを呼び出します(祖先のメッセージ処理メソッドにより該当イベントも処理する場合)。
メモ: 個別のメッセージを処理するには、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);
}