フォーム内のすべてのコントロールにメッセージをブロードキャストする
メッセージの送信 への移動
フォームなどのコンテナにあるすべてのコントロールに影響を及ぼすグローバルな設定をコンポーネントで変更するときは、それらのコントロールにメッセージを送信して各コントロールが自分自身を適切に更新できるようにするとよいでしょう。 必ずしもすべてのコントロールがこの通知に応答する必要があるわけではありませんが、メッセージをブロードキャストすることで、応答方法がわかっているすべてのコントロールに通知することができます。それ以外のコントロールでは、メッセージを無視してかまいません。
別のコントロールにあるすべてのコントロールにメッセージをブロードキャストするには、Broadcast メソッドを使用します。メッセージをブロードキャストする前に、伝えたい情報をメッセージ レコードに格納します。
Delphi:
var
Msg: TMessage;
begin
Msg.Msg := MY_MYCUSTOMMESSAGE;
Msg.WParam := 0;
Msg.LParam := Longint(Self);
Msg.Result := 0;
C++:
TMessage Msg;
Msg.Msg = MY_MYCUSTOMMESSAGE;
Msg.WParam = 0;
Msg.LParam = (int)(this);
Msg.Result = 0;
次に、通知先となるすべてのコントロールの親に、このメッセージ レコードを渡します。 これは、アプリケーション内のどのようなコントロールでもかまいません。 たとえば、次のように、作成中のコントロールの親でもかまいません。
Delphi:
Parent.Broadcast(Msg);
C++:
Parent->Broadcast(&Msg);
次のように、現在のコントロールが含まれているフォームでもかまいません。
Delphi:
GetParentForm(self).Broadcast(Msg);
C++:
GetParentForm(this)->Broadcast(&Msg);
次のように、アクティブなフォームでもかまいません。
Delphi:
Screen.ActiveForm.Broadcast(Msg);
C++:
Screen->ActiveForm->Broadcast(&Msg);
次のように、アプリケーション内のすべてのフォームでさえかまいません。
Delphi:
for I:= 0 to Screen.FormCount - 1 do
Screen.Forms[I].Broadcast(Msg);
C++:
for (int i = 0; i < Screen->FormCount; i++)
Screen->Forms[i]->Broadcast(&Msg);