组件制作之一(概念)[6]

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

本文简介:选择自 linzhengqun 的 blog

        if assigned(fonmousedown) then fonmousedown(self, button, shift, x, y);

end;

而我们先来看看用户外部是怎么操作的,

他自己定义一个someobjmousedown; 是一个事件处理函数,必须和tmouseevent的形式一样:

procedure someobjmousedown(sender: tobject; button: tmousebutton;

  shift: tshiftstate; x, y: integer);

然后他这样赋值:someobj.onmousedown:=someobjmousedown;

当赋值以后,类内部其实是通过onmousedown属性,将someobjmousedown;fonmousedwon关联在一起,也就是说,mousedown方法中调用了fonmousedown(self, button, shift, x, y);其实就等于调用了procedure someobjmousedown(sender: tobject; button: tmousebutton;shift: tshiftstate; x, y: integer);

所以用户就可以在这个自定义的事件方法中写自己的代码,当事件发生时,该类的调度机制就会自动调用这个事件方法啦

也许有人会问,为什么从消息处理函数要调用domousedowndomousedown又调用mousedown,然后再调用事件方法呢。为什么不直接在消息处理函数wmlbuttondown中调用呢,其实它这样的做的目的是要进行一些保护判断,以及一些消息附加值的转换,使这些值看起来更加直观。

好了,事件就讲了这里,不知道你们明白了没有,可能是我的表达能力不行,但没有关系,到真正做的时候,大家应该能明白了。

本文关键:组件制作之一(概念)
 

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

go top