Delphi - 如何向TDataModule发送Windows消息?

时间:2010-08-23 20:34:01

标签: delphi windows-messages datamodule

我需要在我的Delphi 2010应用程序中向TDataModule发送一条Windows消息。

我想用

PostMessage(???.Handle, UM_LOG_ON_OFF, 0,0);

问题:

TDataModule没有Handle。我如何向它发送Windows消息?

2 个答案:

答案 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;