Delphi中的消息处理
http://tech.ddvip.com 2006年07月30日 社区交流
本文详细介绍Delphi中的消息处理
type
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
esultLo: Word;
ResultHi: Word);
end;
4、消息的使用:
在DELPHI 中用户可以自定义消息及消息处理句柄消息处理句柄的定义有如下几个原则:
1、消息处理句柄方法必须是一个过程
2、方法声明后要有一个message命令型常数).
3、消息处理句柄方法不需要用override 命令来显式指明重载祖先的一个消息处理句柄
4、在消息处理句柄中一般先是用户自己对消息的处理用祖先类中对应此消息的处理句柄(有些情况下可能正相反).由于可能对祖先类中对此消息的处理句柄的名字和参数类型不清楚避免此麻烦调用Defaulthandler方法.(当然如果要屏蔽掉此消息了)。
消息处理句柄方法声明为:
procedure Mymsgmethod(var message:Tmessage); message Msgtype;
同样用户也可以定义自己的消息自定义消息及消息处理句柄举例如下:
const my_paint=Wm_user+1;
type
Tmypaint=record
msgid:cardinal;
msize:word;
mcolor:longint;
msgresult:longint;
end; //也可以使用Tmessage类型
type
Tmycontrol=class(TCustomControl)
protected
procedure change(var message:Tmypaint); message my_paint;
.....
end;
......
procedure Tmycontrol.change(var message:Tmypaint);
begin
size:=message.msize; { 设 置Tmybutton 尺 寸 属 性}
color:=message.mcolor; { 设 置Tmybutton 颜 色 属 性}
{do something else}
inherited; { 交 由Tcustomcontrol 处 理}
end;
责编:豆豆技术应用