我需要在我的Delphi 2010应用程序中向TDataModule发送一条Windows消息。
我想用
PostMessage(???.Handle, UM_LOG_ON_OFF, 0,0);
问题:
TDataModule没有Handle。我如何向它发送Windows消息?
答案 0 :(得分:8)
你可以轻松地给它一个手柄。看一下Classes单元中的AllocateHWND
。调用此方法为数据模块创建句柄,并定义一个处理UM_LOG_ON_OFF的简单消息处理程序。
答案 1 :(得分:0)
以下示例展示了如何使用 TDataModule
创建 Handle
的后代
uses
Windows, Winapi.Messages,
System.SysUtils, System.Classes;
const
UM_TEST = WM_USER + 1;
type
TMyDataModule = class(TDataModule)
private
FHandle: HWND;
protected
procedure WndProc(var Message: TMessage); virtual;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy(); override;
property Handle : HWND read FHandle;
end;
...
uses
Vcl.Dialogs;
constructor TMyDataModule.Create(AOwner : TComponent);
begin
inherited;
FHandle := AllocateHWND(WndProc);
end;
destructor TMyDataModule.Destroy();
begin
DeallocateHWND(FHandle);
inherited;
end;
procedure TMyDataModule.WndProc(var Message: TMessage);
begin
if(Message.Msg = UM_TEST) then
begin
ShowMessage('Test');
end;
end;
然后我们可以向数据模块发送消息,如下所示:
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(MyDataModule.Handle, uMyDataModule.UM_TEST, 0, 0);
end;