大家都知道在写VCL 时(狠多地方,都要inherit)!
于是,每个控件都有property  Create(AOwner:TComponecnt); 过程 、
//现在来详解Create() ;
因为create()在,TWinControl 类中是这样定义的
property Create(AOwner:TComponecnt);virtual ;//因为它是虚类,所以它在以后的类中都可以Inherit(继承)。property XXX.Create(AOwner:TComponecnt);
begin
inherited;end
//--------------------------------------
现在问题出来了,
//---------------------------------------
大家看一看:控件的OnEnter 和OnExit 事件。
它在TWinControl 中定义是这样的:
property OnEnter;DYNAMIC ;
代码部分:
property XXX.OnEnter;
begin
if assigned(FOnEnter) then
DOEnter(Self)
//好像是这样的,我记不清了。
end
//、、-------------\
其中:FOnEnter 是这样定义的:
private
      FOnEnter :TNotiyMod..........
....
?????????????????????????????
问:现在:
我要继承控件的OnEnter 事件怎 么办? 
(说深一点:我要继承基类是DYNAMIC 的事件,应怎 么写代码??)

解决方案 »

  1.   

    你应该继承的是DoEnter,
    不是OnEnter
      

  2.   

    可是 DoEnter 事件 ,是这样定义的、在TWinControl:
    property DoEnter;DYNAMIC 请问,怎样写继承基本带有dynamic 的事件呢?
      

  3.   

    同样
    dynamic类似于virtual
    procedure DoEnter; override;
      

  4.   

    //agree xzgyb(老达摩)
    这个标题看起来这么吓人,不过里面的内容多少让人失望,
    也不需要什么高手,查一下delphi帮助就有了。Virtual versus dynamicVirtual and dynamic methods are semantically equivalent. They differ only in the implementation of method-call dispatching at runtime. Virtual methods optimize for speed, while dynamic methods optimize for code size.In general, virtual methods are the most efficient way to implement polymorphic behavior. Dynamic methods are useful when a base class declares many overridable methods which are inherited by many descendant classes in an application, but only occasionally overridden.
      

  5.   

    问:现在:
    我要继承控件的OnEnter 事件怎 么办? 
    答:
     这样
    type
     tmyclass=class(TWincontrol)
     published
          property  onenter;//delphi中事件就是一种特殊的属性
    end;请问,怎样写继承基本带有dynamic 的事件呢?
    答:
    至于dynamic与virtual的区别在与
    virtual是直接寻址,dynamic是间接寻址.
    用法都一样为
     procedure TXXXX.XXXXX; override;
    但要注意,如果你的类香套很深,且使用很频繁的话最好用Dynamic声明,因为dynamic比较节省资源,但速度比virtyual慢.