3. Определение собственных сообщений

Существует возможность определять, отсылать и принимать собственные сообщения.

Номера своих собственных сообщений вы должны отсчитывать от WM_USER.

Пример 6.3. Использование собственных сообщений

const
  WM_MYMSG=WM_USER+1;

procedure WMMyMsg (var Msg:TMessage); message WM_MYMSG;

implementation

procedure TForm1.WMMyMsg(var Msg: TMessage);
begin
  Label2.Caption:='Сообщение WM_MYMSG принято';
end;

Для всех функций отправки сообщений можно в качестве первого параметра указывать HWND_BROADCAST, однако для того, чтобы другие окна были уведомлены о наличии такого сообщения необходимо его предварительно зарегистрировать с помощью процедуры RegisterWindowMessage. Прием сообщения в этом случае можно осуществить, переопределив обработчик сообщений по умолчанию окна-приемника:

Пример 6.4. Использование широковещательного сообщения

procedure TForm1.Button6Click(Sender: TObject);
begin
WM_MYMSG_TO_ALL:=RegisterWindowMessage('WM_MYMSG_TO_ALL');
SendMessage(HWND_BROADCAST,WM_MYMSG_TO_ALL,0,0)
end;

procedure TForm1.DefaultHandler(var Message);
begin
with TMessage(Message) do
begin
if Msg = WM_MYMSG_TO_ALL then
Label3.Caption:='WM_MYMSG_TO_ALL'
else Inherited;
end;
end;