Delphi中的事件处理过程

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;
以上是个人对事件的理解,如果有理解错误,欢迎指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值