在一个自定义的控件(如下)  type
  Tmyevent=procedure(sender:TObject) of object;
  Tmycontrol=class(TComponent)
   private
    Fonx:TmyEvent;
    procdure dox();
    ...
  protected
    procedure x();
  public
   .....
  published
   property onx:Tmyevent read Fonx write Fonx; 
   end;
问题:
1.delphi是如何知道onx事件的"事件调度方法"是哪一个过程(dox()或x()),是不是根据过程名来识别?还是根据过程体中是否有如下代码:
procedure ccc();
begin
if assigned(Fonx) then Fonx(self);// 
end;
来识别?
2.onx事件的"事件调度方法"是不是必须定义成procedure 而不能是function?
谢谢!

解决方案 »

  1.   

    事件好象只能是procedure不能是函数吧
      

  2.   

    1、不明白你想问什么,事件由你写的控件内部触发,在什么地方都可以。就好像你写的
       if assigned(Fonx) then Fonx(self); ,它会先判断有无指定事件处理函数,有就
       执行。
    2、可以写义为procedure 或者 function
      

  3.   


    to  HsWong() ( ) 信誉:100  
    据资料上记载:
    "当事件发生时,delphi并不是直接掉用组件使用者建立的事件句柄而是先调用事件调度方法去处理事件,由事件调度方法检查组件使用者是否建立了事件句柄如有就掉用这个句柄"所以(我认为:每个事件句柄都应有相应的"事件调度方法")在开发自定义组件时应该定义事件调度方法,我想问的自定义组件的"事件调度方法"应该如何写?
      

  4.   

    好像说得乱七八糟的,呵呵
    假如你在Form1使用Tmycontrol   MyCtrl:=Tmycontrol;
    那么你可以定义onx事件的"调度方法",即一个函数,定义为TForm1的成员或者全局都可以
    procedure OnxProc(Sender:TObject); //参数要跟事件的一样
    begin
      //这里写事件处理代码;
    end;MyCtrl.onx:=OnxProc; //指定事件处理函数
      

  5.   

    to HsWong()
    你的意思是不是说"调度方法"应该在使用自定义控件时来定义,而不是在开发自定义控件时来定义?
    谢谢!
      

  6.   

    to  HsWong() ( ) 信誉:100  
    明白啦!谢谢.