TControl的一些疑惑(消息处理)(50)

  • 主题发起人 主题发起人 guanrui
  • 开始时间 开始时间
G

guanrui

Unregistered / Unconfirmed
GUEST, unregistred user!
随便找的一条消息procedure TControl.WMLButtonDown(var Message: TWMLButtonDown);begin SendCancelMode(Self); inherited; if csCaptureMouse in ControlStyle then MouseCapture := True; if csClickEvents in ControlStyle then Include(FControlState, csClicked); DoMouseDown(Message, mbLeft, []);end;有点不明白的, 他的父类TComponent并无消息,那inherited;从何而来呢,到底继承了什么呢,请高手指点下 谢谢
 
估计是一种习惯,不写也可以。如果将来不同的系统或是delphi版本,如果有了这个消息,那就不用改代码了。
 
问题是 他的父类 根本声明这个消息的啊.... 再说了 它也不虚方法....实在有点想不明白...
 
这有可能是,代码机自动生成的吧,不会每一行代码都要程序员自己写吧
 
可能是为了以后升级方便?
 
没人能回答吗? 人气越来越不行咯...呵呵~ 再等等就结贴...
 
没有就空
 
VCL代码:procedure TControl.WndProc(var Message: TMessage);begin ... Dispatch(Message);end;procedure TObject.Dispatch(var Message);asm ... CALL FindDynaMethod POP EAX JE @@default@@default: POP ESI MOV ECX,[EAX] JMP DWORD PTR [ECX] + VMTOFFSET TObject.DefaultHandlerend;
 
Delphi 里消息都一律是 dynamic;
 
to: zwjChina 谢谢 似乎 你回答的 和我问的 没什么关系吧Dispatch方法 如果我理解不错的话,是把把一些没有处理的消息交给操作系统处理......to: liuls 能说明白点么?
 
When inherited has no identifier after it, it refers to the inherited method with the same name as the enclosing method or, if the enclosing method is a message handler, to the inherited message handler for the same message. In this case, inherited takes no explicit parameters, but passes to the inherited method the same parameters with which the enclosing method was called. For example,
 
帮助里面说的比较明显了,它可以继承方法也可以指向同一个消息的消息处理函数你那个指的是后者,个人认为它应该指向的是默认的消息处理函数或程序
 
Delphi的消息机制是,任何的消息函数都是虚方法,不需要显式指明是否为虚方法或动态方法。
 
谢谢各位...
 
谢谢 各位
 
后退
顶部