Delphi的消息处理[1]
Delphi是Borland公司的一种面向对象的可视化软件开发工具
Delphi集中了Visual C + +和Visual Basic两者的优点 容易上手 功能强大 特别是在界面设计 数据库编程 网络编程方面更有其独特的优势 Delphi中的消息
消息是Windows发出的一个通知 它告诉应用程序某个事件发生了 在Delphi中 大多数情况下Windows的消息被封装在VCL的事件中 我们只需处理相应的VCL事件就可以了 但如果我们需要编写自己的控件 截获或过滤消息就必须深入研究Win 的消息处理机制
在Delphi中消息以TMessage记录的方式定义 打开Message pas文件 我们可以看到Tmessage是这样定义的
type
TMessage = packed record
Msg: Cardinal;
case Integer of : (WParam: Longint; LParam: Longint;
Result: Longint);
: (WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
其中 Msg是区别于其他消息的常量值 这些常量值可以是Windows单元中预定义的常量 也可以是用户自己定义的常量 Wparam通常是一个与消息有关的常量值 也可以是窗口或控件的句柄 LParam通常是一个指向内存中数据的指针
Result是消息处理的返回值 Wparam Lparam和Result都是 位的 如果想访问其中的低 位或高 位可以分别使用WparamLo WparamHi LParamLo LparamHi ResultLo和ResultHi
在Delphi中除了通用的Tmessage外 还为每个Windows定义了一个特殊的消息记录 我们可以浏览Message pas文件 下面是键盘的消息记录
MKey = packed record
Msg: Cardinal;
CharCode: Word;
Unused: Word;
KeyData: Longint;
Result: Longint;
与键盘相关的消息如 WM_KEYDOWN WM_KEYUP WM_CHAR WM_SYSKEYDOWN WM_SYSKEYUP WM_SYSCHAR的记录也被定义为Mkey 在Message pas文件中有以下声明
MChar = Mkey MKeyDown =
Mkey MKeyUp = Mkey MSys
KeyDown = Mkey; MSysKeyUp =
Mkey MSysChar = Mkey
lishixinzhi/Article/program/Delphi/201311/24883