Как послать message всем?
Как послать message всем?
Как послать message всем? Hадо послать мессагy всем заинтеpесованным объектам - pазличным классам - фоpмам, контpолам и т.д.? Пpобовал делать так: const FM_FINDPHOTO = $0510; SendMessage(HWND_BROADCAST,FM_FINDPHOTO,0,0); Hи чеpта не ловится, пока напpямyю хэндл не yкажешь :( Для использовать hwnd_Broadcast, нужно сперва зарегистрировать уникальное сообщение FM_FindPhoto:=RegisterWindowMessage('MyMessageToAll'); Чтобы поймать это сообщение в другом приложении, нужно перекрыть DefaultHandler procedure TForm1.DefaultHandler(var Message); begin with TMessage(Message) do begin if Msg = Fm_FindPhoto then MyHandler(WPARAM,LPARAM) else Inherited DefaultHandler(Message); end; Для посылки сообщения дочерним контролам можно использовать процедуру Broadcast. *************************** Как сообщить всем формам моего приложения (в том числе и не видимым в данный момент) об измeнении каких-то глобальных значений? Один из способов - создать пользовательское сообщение и использовать метод preform чтобы разослать его всем формам из массива Screen.Forms. Пример: {Code for Unit1} const UM_MyGlobalMessage = WM_USER + 1; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private {Private declarations} procedure UMMyGlobalMessage(var AMessage: TMessage); message UM_MyGlobalMessage; public {Public declarations} end; var Form1: TForm1; implementation {$R *.DFM} uses Unit2; procedure TForm1.FormShow(Sender: TObject); begin Form2.Show; end; procedure TForm1.UMMyGlobalMessage(var AMessage: TMessage); begin Label1.Left := AMessage.WParam; Label1.Top := AMessage.LParam; Form1.Caption := 'Got It!'; end; procedure TForm1.Button1Click(Sender: TObject); var f: integer; begin for f := 0 to Screen.FormCount - 1 do Screen.Forms[f].Perform(UM_MyGlobalMessage, 42, 42); end; {Code for Unit2} const UM_MyGlobalMessage = WM_USER + 1; type TForm2 = class(TForm) Label1: TLabel; private {Private declarations} procedure UMMyGlobalMessage(var AMessage: TMessage); message UM_MyGlobalMessage; public {Public declarations} end; var Form2: TForm2; implementation {$R *.DFM} procedure TForm2.UMMyGlobalMessage(var AMessage: TMessage); begin Label1.Left := AMessage.WParam; Label1.Top := AMessage.LParam; Form2.Caption := 'Got It!'; end;