a ----windows消息类型
tmsg 记录类型,在windows单元中定义
type
tmsg=packedrecord
hwnd:hwnd;//窗口句柄
message:unit;//消息常量标示符
wparam:wparam;//32为消息的特定附加信息
lparam:lparam;//32为消息的特定附加信息
time:dword;//消息创建时间
pt:tpoint;//消息创建时的鼠标坐标位置
end;
win32定义的消息常量以vm开头,表示特定的消息,在delphi中message单元定义了所有的windows消息。
消息的结构都是纪录,占用12个字节大小。
b---消息的产生到被相应的过程:
1-系统中发生了某个事件
2-windows将这个事件翻译成消息,放入消息队列
3-程序接受这个消息,并且存入tmsg中
4-程序将消息传递给相应的窗口
5-窗口响应消息,执行操作
c--delphi中的消息机制
在delphi中每个窗口和vcl组件固有一个消息接受例程mainwndproc-----定义在twincontrol中的一个静态方法。
procedure mainwndproc(var message:tmessage);他不直接处理消息,而是提交给wndproc来处理。
procedure wndproc(var message:tmessage);virtual;--在此过程中可以自己添加处理消息的代码。
wndproc调用dispatch来分配消息(dispatch在tobject根类中定义,他的参数必须是一个记录类型,并且必须有一个cardinal类型的域)。
dispatch将根据消息号码调用相应的处理消息的方法。
d--发送消息的方法
perform()--- sendmessage()--postmessage()--
在程序中发送消息给自己,只需要定义一个消息常量(wm_user+100到$7fff范围内)。
然后声明和定义个处理消息的过程,比如:
。。
private
procedure domymessage(var message:tmessage);message vm_mymessage;
程序间传递消息-调用registerwindowmessage()
广播消息-broadcast()
e--消息处理之重构wndproc
procedure tmyobject.wndproc(var message:tmessage);
begin
//判断是否处理该消息
inherited wndproc(message);
//为处理的消息交给父类wndproc处理
end;