您的位置:首页 > 编程语言 > Delphi

Delphi中的事件处理过程

2007-12-15 10:48 1111 查看
Delphi的事件是属性的一种特别类型,事件处理过程系由windows捕获消息再将消息封装成事件的过程。如下是以 OnMouseDowng事件为例,说明事件的执行过程。
以下是在controls.pas里的代码:
//定义事件的方法指针,TMouseEvent 是一种鼠标事件类型,是过程指针。
TMouseEvent = procedure(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer) of object;

//定义事件类型变量
FOnMouseDown :TMouseEvent ;

//定义事件属性,当获取OnMouseDown的值时,返回FOnMouseDown指针变量,当给OnMouseDown赋值时,也就是FOnMouseDown赋值;
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;

//在控件中定义获取WM_RBUTTONDBLCLK类型的消息。
procedure WMRButtonDblClk(var Message: TWMRButtonDblClk); message WM_RBUTTONDBLCLK;
//消息处理过程
procedure TControl.WMRButtonDblClk(var Message: TWMRButtonDblClk);
begin
inherited;
DoMouseDown(Message, mbRight, [ssDouble]);//调用DoMouseDown方法处理消息过程
end;

//DoMouseDown方法定义
procedure DoMouseDown(var Message: TWMMouse; Button: TMouseButton;
Shift: TShiftState);
//DoMouseDown方法实现
procedure TControl.DoMouseDown(var Message: TWMMouse; Button: TMouseButton;
Shift: TShiftState);
begin
if not (csNoStdEvents in ControlStyle) then
with Message do
if (Width > 32768) or (Height > 32768) then
with CalcCursorPos do
MouseDown(Button, KeysToShiftState(Keys) + Shift, X, Y)
else
MouseDown(Button, KeysToShiftState(Keys) + Shift, Message.XPos, Message.YPos);
end;

//关联FOnMouseDown的方法
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); dynamic;
procedure TControl.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnMouseDown) then FOnMouseDown(Self, Button, Shift, X, Y);//如果FOnMouseDown过程指针有赋值,则调用FOnMouseDown所指向的方法,即OnMouseDown设置的值。
end;

以上是个人对事件的理解,如果有理解错误,欢迎指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: