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