gpt4 book ai didi

delphi - 我的表单从未收到发布的自定义消息

转载 作者:行者123 更新时间:2023-12-03 15:22:06 26 4
gpt4 key购买 nike

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

最佳答案

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

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

Applications cannot use these values for private messages.

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

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);   

关于delphi - 我的表单从未收到发布的自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com