我使用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)时;执行我应该收到消息 任务开始了,但是同样的错误,没有任何反应!
答案 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);