初涉Delphi下Windows消息机制——同一程序内自定义消息实例

消息区别于调用的优势:消息可以让你不需要知道接收者的确切类型。同时,消息可以有选择地处理。如果接收者对消息没有做任何处理,不会造成任何后果。最后,消息可以广播给多个接收者,而要同时调用几个过程则比较困难。

下面是一个在同一应用程序内自定义消息的实例:

创建一个窗口FORM1,拖一个按钮控件,btn1。双击btn1,创建btn1的点击事件。代码如下(省略头部代码):

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; //自定义消息常量 const MY_MESSAGE=WM_USER+100; type TForm1 = class(TForm) btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } //消息处理函数 procedure mymessage(var mymsg:TMessage);message MY_MESSAGE; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //消息处理 procedure Tform1.mymessage(var mymsg:TMessage); begin beep; inherited; end; procedure TForm1.btn1Click(Sender: TObject); begin //发送消息 SendMessage(Form1.Handle,MY_MESSAGE,0,0); end; end. 

 

运行该程序,点击button,就会运行SendMessage发送MY_MESSAGE这样一个自定义消息过去。Mymessage接受到该消息就会产生beep声响。

向指定窗口句柄发送消息的函数有3个,也就是sendMessage可以用其他两个代替:

 

推荐:初涉Delphi下Windows消息机制——系统预定义消息实例

[  该实例使用的是windows的WM_KEYDOWN消息,当按键按下时,发出beep声音。创建一个窗口,代码部分如下:type TForm1 = class(TForm) private { Private declarations

 

Form1.perform(MY_MESSAGE,0,0);

PostMessage(Form1.Handle,MY_MESSAGE,0,0);

Perform和SendMessage是要等消息处理结束后才返回,而PostMessage则是把消息送到消息队列之后,立即返回,管你什么时候处理。

在这个程序中。我们定义消息常量MY_MESSAGE=WM_USER+100;因为系统约定WM_USER+100到$7FFF之间是留给用户自定义的消息常量值。

procedure mymessage(var mymsg:TMessage);message MY_MESSAGE;

这次传递的是TMessage类型。而message标识符后面则是自定义消息常量。

SendMessage(Form1.Handle,MY_MESSAGE,0,0);

这是发送消息函数,参数类型分别为HWND,UINT,WPARAM,LPARAM,分别对应TMsg前4个成员。返回值为LRESULT,对应消息处理结果。

 

推荐:Delphi 自定义消息处理过程与Windows消息处理过程

[Delphi中,自定义消息处理过程与Windows消息处理过程的定义是一样的。1.主用步骤:1>. 首先定义一个消息标识符常量;如:WM_MYMessage = WM_USER+ 5;(标识符常量的取值

posted on   癫狂编程  阅读(180)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2019-01-29 sqlserver-触发器-判断更新了哪个字段。

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
好的代码像粥一样,都是用时间熬出来的
点击右上角即可分享
微信分享提示