7

TDataModuleDelphi2010アプリのにWindowsメッセージを送信する必要があります。

使いたい

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

質問:

にはTDataModuleありませんHandle。どうすればWindowsメッセージを送信できますか?

4

2 に答える 2

10

簡単にハンドルを付けることができます。AllocateHWNDクラスユニットをご覧ください。これを呼び出してデータモジュールのハンドルを作成し、UM_LOG_ON_OFFを処理する単純なメッセージハンドラーを定義します。

于 2010-08-23T20:58:57.313 に答える
1

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;
于 2021-02-17T09:29:34.470 に答える