我的表单永远不会收到已发布的自定义消息

时间:2014-06-09 02:26:14

标签: delphi postmessage

我使用PostMessage将来自其他单位的邮件发送到主表单,如下所示:

procedure notify(var Message: TMessage); message 1;

在该程序中,信息根据WParam显示:

procedure TForm1.notify(var Message: TMessage);
begin
  Case (Message.WParam) of
    1: memo1.Lines.Add('task started');
    2: memo1.Lines.Add('in progress');
  end;
end;

在另一个单元中,我发送这样的消息:

PostMessage(Handle, 1, 2, variable_info);

首先,什么是消息ID?我将它替换为1,因为它的类型是基数,我应该使用什么呢?我的邮件永远不会被收到,因为Message.WParam永远不会等于1或2.我的代码出了什么问题?


我编辑了这样的代码:unit1

 const
 WM_MY_MESSAGE = WM_USER + 0;

在代码中我添加了这样的内容:

 PostMessage(Handle,WM_MY_MESSAGE, 1,value_sent);

TFormUnit:

  private
  procedure notify(var Message :TMessage); message WM_MY_MESSAGE;

  procedure TFormMain.notify(var Message: TMessage);
  begin
  Case (Message.WParam)of // which is 1
   1:
  //------------------------------------------
  begin
   memo1.Lines.Add('task started');

通常在PostMessage(Handle,WM_MY_MESSAGE,1,value_sent)时;执行我应该收到消息 任务开始了,但是同样的错误,没有任何反应!

1 个答案:

答案 0 :(得分:8)

message ID必须是唯一的。要在应用程序中发送消息,请使用常量WM_USER(在Messages单位中声明)作为第一个有效的起始编号。

低于WM_USER($ 0400)的值保留给系统定义的消息。 来自文档:

  

应用程序无法将这些值用于私人消息。

在表单的界面部分或在包含应用程序中所有其他消息的单元中声明。

const 
  WM_MY_MESSAGE = WM_USER + 0;

编辑:

除了问题之外,要在PostMessage调用中获取表单窗口句柄,

PostMessage(YourForm.Handle,WM_MY_MESSAGE,1,value_sent);

PostMessage(FindWindow(nil,'YourFormName'),WM_MY_MESSAGE,1,value_sent);