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

Переслать сообщение с помощью SendMessage

Delphi , ОС и Железо , Сообщения Windows

Переслать сообщение с помощью SendMessage

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  This is useful if you want to send a message from your DLL back 
  to the calling application. 
}

 const
   MY_MESSAGE = WM_USER + 4242;

   type
   TForm1 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject);
     // Handler that receive the Message 
    procedure MessageReceiver(var msg: TMessage); message MY_MESSAGE;
   end;

 var
   Form1: TForm1;

 implementation

 {$R *.DFM}

 procedure TForm1.Button1Click(Sender: TObject);
 var
   txt: string;
 begin
   txt := 'Hello World';
   SendMessage(Form1.Handle, MY_MESSAGE, 0, DWORD(PChar(txt)));
 end;

 // To receive this custom Message that is addressed to form1.handle 
// you need a message handler. 

procedure TForm1.MessageReceiver(var msg: TMessage);
 var
   txt: PChar;
 begin
   txt := PChar(msg.lParam);
   msg.Result := 1;
   ShowMessage(txt);
 end;


 end.

Это фрагмент кода на Delphi, демонстрирующий использование функции SendMessage для отправки пользовательского сообщения из DLL обратно в вызывающую приложение.

Константы и типы

  • MY_MESSAGE: константа, определенная как WM_USER + 4242, которая является уникальным идентификатором для пользовательского сообщения.
  • TForm1: класс, представляющий форму с кнопкой и двумя процедурами: Button1Click и MessageReceiver.
  • PChar: тип alias для указателя на символ (строку).

Переменные

  • Form1: экземпляр класса TForm1.

Имплементация

  • Процедура Button1Click:
    • Эта процедура вызывается при клике кнопки.
    • Она устанавливает строковую переменную txt в значение "Hello World".
    • Затем она использует функцию SendMessage для отправки пользовательского сообщения (MY_MESSAGE) формой с указателем на строку txt в параметре lParam.
  • Процедура MessageReceiver:
    • Это обработчик сообщений, получающий пользовательское сообщение, отправленное процедурой Button1Click.
    • Она извлекает строку из параметра lParam с помощью типкаста PChar.
    • Затем она устанавливает свойство Result объекта TMessage в значение 1 и отображает сообщение с полученной строкой.

Как это работает

Когда кнопка кликается, процедура Button1Click отправляет пользовательское сообщение (MY_MESSAGE) форме с строкой "Hello World" как payload. Обработчик сообщений MessageReceiver получает это сообщение и извлекает строку из параметра lParam. Затем она отображает сообщение с полученной строкой.

Это код демонстрирует использование функции SendMessage для отправки пользовательских сообщений между компонентами в приложении Delphi, что может быть полезно для коммуникации между разными частями приложения или даже между несколькими приложениями.

Альтернативное решение

Вместо использования функции SendMessage, можно также использовать события и уведомления для коммуникации между компонентами. Например, можно создать обработчик событий, который вызывается при клике кнопки, и затем использовать этот обработчик для уведомления других компонентов о действии.

Например:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Уведомить другие компоненты о клике кнопки
  Notification('ButtonClicked');
end;

// Другие компоненты могут получать это уведомление и реагировать соответственно
procedure TForm2.Notification(const Msg: string);
begin
  // Обработать уведомление здесь
  ShowMessage(Msg);
end;

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

Пересылка сообщения в вызывающую программу с помощью SendMessage позволяет отправить из динамической библиотеки (DLL) сообщение обратно в приложение, которое его вызвало.


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

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




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


:: Главная :: Сообщения Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:19:43/0.0033650398254395/0