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);
所以用户就可以在这个自定义的事件方法中写自己的代码,当事件发生时,该类的调度机制就会自动调用这个事件方法啦
也许有人会问,为什么从消息处理函数要调用domousedown,domousedown又调用mousedown,然后再调用事件方法呢。为什么不直接在消息处理函数wmlbuttondown中调用呢,其实它这样的做的目的是要进行一些保护判断,以及一些消息附加值的转换,使这些值看起来更加直观。
好了,事件就讲了这里,不知道你们明白了没有,可能是我的表达能力不行,但没有关系,到真正做的时候,大家应该能明白了。