加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:34:56 所属栏目:大数据 来源:网络整理
导读:我正在使用PostMessage将来自其他单元的消息发送到主表单,如下所示: procedure notify(var Message: TMessage); message 1; 在程序中,根据WParam显示信息: procedure TForm1.notify(var Message: TMessage);begin Case (Message.WParam) of 1: memo1.Lines
我正在使用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,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,value_sent)时;执行我应该收到消息
任务开始了,但是同样的错误,没有任何反应!

解决方法

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

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

Applications cannot use these values for private messages.

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

const 
  WM_MY_MESSAGE = WM_USER + 0;

编辑:

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

PostMessage(YourForm.Handle,value_sent);

要么

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读