Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как послать самостийное сообщение всем главным окнам в Windows

Delphi , Программа и Интерфейс , Главные формы

Как послать самостийное сообщение всем главным окнам в Windows

Автор: Nomadic

"Windows" - это слово из языка апачей. В переводе означает: "Белый человек, глядящий через стеклянный экран на песочные часы."


var
  FM_FINDPHOTO: Integer;

  // Для того, чтобы использовать hwnd_Broadcast нужно
  // сперва зарегистрировать уникальное сообщение.

initialization
  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;
end;

// А теперь можно в приложении-передатчике
SendMessage(HWND_BROADCAST, FM_FINDPHOTO, 0, 0);

Кстати, для посылки сообщения дочерним контролам некоего контрола можно использовать метод Broadcast.

Программный вопрос на Delphi!

Код, который я предоставил, отправляет сообщение в широковещательном режиме всем верхним окнам в Windows с помощью функции SendMessage. Вот разбивка каждого шага:

  1. Первая секция объявляет целочисленную переменную FM_ FINDPHOTO, которая будет использоваться как уникальный идентификатор сообщения.
  2. В разделе initialization вызывается функция RegisterWindowMessage, чтобы зарегистрировать новое окно сообщения с именем 'MyMessageToAll'. Это возвращает идентификатор сообщения, который хранится в FM_ FindPhoto.
  3. Процедура DefaultHandler зарегистрирована как обработчик для всех сообщений. В этой процедуре она проверяет, если входящее сообщение соответствует идентификатору сообщения FM_ FindPhoto. Если это так, она вызывает процедуру MyHandler с параметрами WPARAM и LPARAM.
  4. Наконец, в основной части кода вызывается функция SendMessage с тремя аргументами: HWND_BROADCAST, FM_ FindPhoto и нулями для обоих WPARAM и LPARAM. Это отправляет широковещательное сообщение всем верхним окнам.

Комментарий о отправке сообщений в дочерние контролы контрола является правильным. Вы можете использовать метод Broadcast контрола, чтобы отправить сообщение всем его дочерним контролам.

Вот альтернативное решение с использованием встроенной функциональности Delphi: вы можете использовать функцию PostMessage с сообщением WM_APP и уникальным идентификатором сообщения. Например:

procedure TForm1.SendBroadcastMessage;
var
  msg: TMessage;
begin
  msg.Msg := WM_APP + MyCustomMessageID;
  PostMessage(HWND_BROADCAST, msg);
end;

const
  MyCustomMessageID = $FFFF; // выберите уникальное значение

В этом примере вы определяете уникальный идентификатор сообщения и используете его с функцией PostMessage, чтобы отправить широковещательное сообщение. Получающее окно может обработать это сообщение, используя свою процедуру DefaultHandler или зарегистрировав специальный обработчик для уникального идентификатора сообщения.

Обратите внимание, что в обоих примерах получающее окно должно зарегистрировать обработчик для широковещательного сообщения, чтобы его правильно обработать.

В статье описывается способ отправки сообщения всем главным окнам в Windows с помощью регистрации уникального сообщения и использования функции SendMessage с параметром HWND_BROADCAST.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Главные формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:47:35/0.0056321620941162/1