delphi win32 编程系列之一

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 acuier 的 blog

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;

本文关键:delphi win32 编程系列之一
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top