delphi定义自己的消息
定义一个消息需要两个步骤: 1.声明一个消息标识符 2.声明一个消息记录类型
一个消息标识符是一个整数大小的常数。Windows自用低于1024的消息,所以当你声明你自己的消息,你应该开始高于这一数字。 常数WM_APP代表了用户定义的消息开始编号。当定义消息标识符,你应该基于WM_APP它们。(这是因为WM_USER所代表1024以后的消息编号,有一些已经被Windows标准组件占用了,为了避免冲突,使用WM_APP) 如果你想给你的消息一个有用的参数名,你需要声明该消息的消息记录类型。消息记录是传递给消息处理方法的参数类型。如果你不使用消息的参数,或者如果你想使用旧风格的参数表示法(wParam参数,lParam参数,等等),你可以使用默认的消息记录,TMessage,其原型如下:
要声明一个消息记录类型,请按照下列约定: 1.命名消息记录类型,以T开头 2.第一个字段为Msg,为对应的消息 3.定义接下来的两个字节对应Word参数,接下来的两个字节为未使用。 或 接下来的四个字节定义对应于Longint型参数。 4.最后字段添加一个类型为Longint型的Result。 如Delphi源码里面:
有不同的方式来发送一个Windows消息,经常使用的是SendMessage和PostMessage,它们原型如下:
其中WPARAM和LPARAM都是Longint。这两个函数参数一样,返回值不同。SendMessage()返回被处理的消息的结果值,但是PostMessage()返回的只是一个布尔值,表示是否该消息被放入到目标窗口队列中。另外一个方面,SendMessage()是同步调用的,PostMessage()是异步调用的。
下面一个例子来说明,如何自定义消息。示例功能为应用程序调用计算器类,当计算器类计算完毕,就发带计算结果的消息给应用程序: 1.新建Delphi 7应用程序,单击菜单栏→File→New→Unit,在弹出的单元文件,输入以下代码:
2.主窗体上放置2个编辑框和一个按钮,主单元文件代码如下:
3.运行程序,结果如下所示:

delphi定义自己的消息的更多相关文章
- Delphi里的Windows消息(可查MSDN指定位置)
各种控件的通知消码和控制消息可由MSDN-> Platform SDK-> User Interface Services->Windows User Interface->C ...
- 深入delphi编程理解之消息(二)发送消息函数及消息编号、消息结构体的理解
一.delphi发送消息的函数主要有以下三个: (一).SendMessage函数,其原型如下: function SendMessage( hWnd: HWND; {目标句柄} Msg: UINT; ...
- TMsgThread, TCommThread -- 在delphi线程中实现消息循环
http://delphi.cjcsoft.net//viewthread.php?tid=635 在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使 ...
- TMsgThread, TCommThread -- 在delphi线程中实现消息循环(105篇博客,好多研究消息的文章)
在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供. 花了两天的事件研究了 ...
- WM_PAINT在微软官方定义中,wParam和lParam都没有使用,所以就被Delphi给重定义了这个消息,还增加了DC(Delphi可任意改写消息的结构)
LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); Parameters wParam ...
- 【温故Delphi】之VCL消息机制小结
TObject消息分派 procedure Dispatch(var Message); virtual; #负责分派消息到特定VCL组件的事件处理函数 procedure DefaultHandle ...
- delphi XE7 中的消息
在delphi XE7的程序开发中,消息机制保证进程间的通信. 在程序中,消息来自: 1)系统: 通知你的程序用户输入,涂画以及其他的系统范围的事件: 2)你的程序:不同的程序部分之间的通信信息. ...
- Delphi窗体间发送消息或字符串
在Delphi 开发中,常常应用到窗体消息传递,以达成某种操作要求,以下列举一个应用的例子,供大家参考. 自定义过程/函数方法://发送字符串到指字句柄的窗口中 (接收窗体需用发送时的消息常量WM_C ...
- 深入delphi编程理解之消息(一)WINDOWS原生窗口编写及消息处理过程
通过以sdk方式编制windows窗口程序,对理解windows消息驱动机制和delphi消息编程有很大的帮助. sdk编制windows窗口程序的步骤: 1.对TWndClass对象进行赋值; 2. ...
随机推荐
- 京东集团副总裁李大学:像CEO一样思考 - Dancen的专栏 - 博客频道 - CSDN.NET
京东集团副总裁李大学:像CEO一样思考 - Dancen的专栏 - 博客频道 - CSDN.NET 京东集团副总裁李大学:像CEO一样思考
- hdoj 4324 Triangle LOVE【拓扑排序判断是否存在环】
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- hdu4348 - To the moon 可持久化线段树 区间修改 离线处理
法一:暴力! 让干什么就干什么,那么久需要可持久化线段树了. 但是空间好紧.怎么破? 不down标记好了! 每个点维护sum和add两个信息,sum是这段真实的和,add是这段整体加了多少,如果这段区 ...
- UVA 10985 - Rings'n'Ropes(floyd)
Problem D Rings'n'Ropes Time Limit: 3 seconds "Well, that seems to be the situation. But, I don ...
- 关于在VMware上装lFEDORA系统
VMware虚拟机启动当中某个操作系统的时候,会出现如下提示 Cannot connect virtual device floppy0. No corresponding device is ava ...
- Mean Shift具体介绍
Mean Shift,我们 翻译为“均值飘移”.其在聚类,图像平滑.图像切割和跟踪方面得到了比較广泛的应用.因为本人眼下研究跟踪方面的东西,故此主要介绍利用Mean Shift方法进行目标跟踪,从而对 ...
- Linux入门基础 #5:Linux文件系统挂载管理
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- Swift学习笔记八:枚举
1. 枚举语法 1)枚举的定义 使用enum关键词而且把它们的整个定义放在一对大括号内: enum SomeEumeration { // enumeration definition go ...
- 前端工具之WebPack解密--使用
接上一篇的内容继续来说,背景篇的内容主要是介绍web前端工具的出现的原因和当前主要JavaScript模块化编程的几种规范!这篇内容主要介绍webpack的初级使用! 注意:目前webpack分为两个 ...
- 外观模式-Facade
外观模式是为了解决类与类之间依赖关系的,外观模式将类间关系放在一个Facade类中,降低了类类之间的耦合度,该模式中不涉及接口 举一个经典的例子: CPU类: public class CPU { p ...