"Windows" - это слово из языка апачей. В переводе означает: "Белый человек, глядящий через стеклянный экран на песочные часы."
var
FM_FINDPHOTO: Integer;
// Для того, чтобы использовать hwnd_Broadcast нужно// сперва зарегистрировать уникальное сообщение.initialization
FM_FindPhoto := RegisterWindowMessage('MyMessageToAll');
// Чтобы поймать это сообщение в другом приложении// (приемнике) нужно перекрыть DefaultHandlerprocedure TForm1.DefaultHandler(varMessage);
beginwith TMessage(Message) dobeginif Msg = Fm_FindPhoto then
MyHandler(WPARAM, LPARAM)
elseinherited DefaultHandler(Message);
end;
end;
// А теперь можно в приложении-передатчике
SendMessage(HWND_BROADCAST, FM_FINDPHOTO, 0, 0);
Кстати, для посылки сообщения дочерним контролам некоего контрола можно
использовать метод Broadcast.
Программный вопрос на Delphi!
Код, который я предоставил, отправляет сообщение в широковещательном режиме всем верхним окнам в Windows с помощью функции SendMessage. Вот разбивка каждого шага:
Первая секция объявляет целочисленную переменную FM_ FINDPHOTO, которая будет использоваться как уникальный идентификатор сообщения.
В разделе initialization вызывается функция RegisterWindowMessage, чтобы зарегистрировать новое окно сообщения с именем 'MyMessageToAll'. Это возвращает идентификатор сообщения, который хранится в FM_ FindPhoto.
Процедура DefaultHandler зарегистрирована как обработчик для всех сообщений. В этой процедуре она проверяет, если входящее сообщение соответствует идентификатору сообщения FM_ FindPhoto. Если это так, она вызывает процедуру MyHandler с параметрами WPARAM и LPARAM.
Наконец, в основной части кода вызывается функция SendMessage с тремя аргументами: HWND_BROADCAST, FM_ FindPhoto и нулями для обоих WPARAM и LPARAM. Это отправляет широковещательное сообщение всем верхним окнам.
Комментарий о отправке сообщений в дочерние контролы контрола является правильным. Вы можете использовать метод Broadcast контрола, чтобы отправить сообщение всем его дочерним контролам.
Вот альтернативное решение с использованием встроенной функциональности Delphi: вы можете использовать функцию PostMessage с сообщением WM_APP и уникальным идентификатором сообщения. Например:
procedureTForm1.SendBroadcastMessage;varmsg:TMessage;beginmsg.Msg:=WM_APP+MyCustomMessageID;PostMessage(HWND_BROADCAST,msg);end;constMyCustomMessageID=$FFFF;// выберите уникальное значение
В этом примере вы определяете уникальный идентификатор сообщения и используете его с функцией PostMessage, чтобы отправить широковещательное сообщение. Получающее окно может обработать это сообщение, используя свою процедуру DefaultHandler или зарегистрировав специальный обработчик для уникального идентификатора сообщения.
Обратите внимание, что в обоих примерах получающее окно должно зарегистрировать обработчик для широковещательного сообщения, чтобы его правильно обработать.
В статье описывается способ отправки сообщения всем главным окнам в Windows с помощью регистрации уникального сообщения и использования функции SendMessage с параметром HWND_BROADCAST.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.