各位大富翁,我需要发送自定义消息,可是怎么接受不到呢?请指点迷津。
const
   WM_selfBoadCase = WM_user + 100;
我在一个button clicked事件中发送该消息如下形式,
postmessage(HWND_BROADCAST,WM_selfBoadCase,0,0);
然后用如下的方式接收:
...............
procedure wmBroadCase(var message:TMessage);Message wm_selfBoadCase;
...........
implementprocedure TForm1.wmBroadCase(var message:TMessage);
begin
    showMessage('get the broadcase Message');
end;这样我怎么也收不到该广播消息。如果我发消息的时候,指定接受者,则可以收到,谁能给
解答一下?谢谢
可以收到的消息模式:
postmessage(tform1.handle,wm_selfboadcase,0,0);
为什么这样收不到?
postMessage(HWND_BROADCAST,wm_selfboadcase,0,0);
怎么样才能收到HWND_BROADCAST消息?
说明我注册消息了。
registerWindowMessage('wm_selfboadcase');

解决方案 »

  1.   

    那个参数是接受消息窗口的句柄啊,你接收消息级处理都是在form1里,当然就是self.handle了。
    ^_^
      

  2.   

    var
      Form1: TForm1;
      uMsg :UINT;
    implementation{$R *.dfm}procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
      if msg.message = uMsg then
        showMessage('get the broadcase Message');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      uMsg := RegisterWindowMessage('mymsg');end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      postMessage(HWND_BROADCAST,uMsg,0,0);
    end;
      

  3.   

    const
       WM_selfBoadCase = WM_user + 100;
    这样定义的消息是无法HWND_BROADCAST的。能HWND_BROADCAST的消息必须uMsg := RegisterWindowMessage('mymsg');
    uMsg必须在0xC000倒0xFFFF之间
      

  4.   

    flyinwuhan(制怒·三思而后行) 
    的好
      

  5.   

    不帮你进入IDE测试了,不过自定义消息最好定在4000以上5000以下常量。因为其他地方的消息常量已经被Windows系统和其他软件占用了。例如 161 这个最常用到的。
      

  6.   

    问题搞定了。代码如下所示。应该先注册一个系统消息。registerwindowmessage
    然后,用application.onmessage事件中接受,就可以了。
    如果用多个程序之间通讯,要用同一个字符串注册消息,就可以了。
    resterwindowmessage('WM_share_Message');
    谢谢各位的帮助。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,unit2, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public    { Public declarations }
       procedure appMessage(var Msg: tagMSG; var Handled: Boolean);  end;var
      Form1: TForm1;
    implementation{$R *.dfm}{ TForm1 }
    procedure TForm1.appMessage(var Msg: tagMSG; var Handled: Boolean);
    begin
       if msg.message = wm_my_message then
           showMessage('self message');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
        WM_My_message := RegisterWindowMessage('WM_MES_REFRESH_CONTROL');
        application.OnMessage := appMessage;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
        postmessage(HWND_BROADCAST,WM_my_Message,0,0);
    end;end.