我不知道在delphi中如何触发一个事件如有一个类A, 当满足某个条件,A的实例就会触发一个自定义的事件。谁能给我一个简单的范例

解决方案 »

  1.   

    如果该条件有对应标准的window消息,则只要对该消息拦截处理就行了.
    否则要自己在类内部另开线程,实时监听该条件是否成立.
      

  2.   

    是啊,如果有特定的消息产生,并让DELPHI接收到,DELPHI会自动分类。然后触发相对应的事件所指向的函数
      

  3.   

    你说的当A满足条件是这样吧?
    private
      procedure test();im....
    ...
    ..
    procedure test();
    being
     showmessage('test');
    end;
    procedure form1.button1onclick(...);
    being    
     if a=条件 then 
       test();
    end;
    你是这意思吗?这只是调用一个函数。
    事件的执行是不的确的。当用户有了一定的动作,产生了消息队列,然后到达DELPHI应用里,才触发事件的,然后去执行事件指向的函数。事件就像一个指针一样。比如我点一下鼠标,会产生
    一个WM_MOUSEDOWN消息,然后DELPHI应用会自动捕捉消息,然后再分配消息到适合的地方去处理。这时正对上了MOUSEDOWN事件,事件又指向一个函数,才真正去处理消息。当然也可以自己定义处理消息的函数
      

  4.   

    我不是指的系统消息或事件,
    我指的是自定义事件
    我用C#描述一下吧
    class test
    {
      public delegate void MyTestHandle(object sender, int i);
      public event MyTestHandle test;
      public void testevent
      {
        ontest();
      }
      public void ontest()
      {
        if(test!= null)
           test();
      }
    } 我想知道如何写触发事件的代码,请兄弟们帮我将上面C#的代码翻译成delphi代码,谢谢
      

  5.   

    其实delphi中的事件是一函数指针,指向消息处理函数,
    你可以自己定义消息函数,但参数格式和输出必须一样而且要有message标示符
      

  6.   

    帮我翻译一下那段代码很难吗?还是delphi的事件就是很难实现??
    to  whitetiger8(白虎)  coreblood(菜码) 
    你们如果想要分,跟我说一下,我开个贴子给你们送分
    可问题没解决,我给谁分啊
      

  7.   

    keke
    白虎兄一个帖子涨了一个角
      

  8.   

    再贴一次,又是50分,嘻嘻~~~~~
    unit Unit2;interfaceuses windows;
    type
      TMyTestHandle=procedure(sender:tobject; i:integer) of object;
    //Class 1
      TTest1=class
      private
        FOnTest:TMyTestHandle;
        procedure FSetOnTest(value:TMyTesthandle);
      public
        procedure DoTest(i:integer);
      published
        property onTest:TMyTestHandle read FOnTest write FSetOnTest;
      end;
    //Class 2
      Ttest2=class
      private
        FTTest1:TTest1;
      public
        constructor create;
        procedure Test(sender:TObject;i:integer);
      end;implementationprocedure Ttest1.DoTest(i:integer);
    begin
      if assigned(FOnTest) then
      begin
        FOnTest(self,i);
      end;
    end;procedure Ttest1.FSetOnTest(value :TmyTesthandle);
    begin
      FOnTest:=value;
    end;{ Ttest2 }constructor Ttest2.create;
    begin
      FTTest1 := Ttest1.Create;
      FTtest1.onTest:= self.Test;
    end;procedure Ttest2.Test(sender: TObject; i: integer);
    begin
      OutPutDebugString('C# convert to Delphi :Test class success ');
    end;end.