调用其名称由另一个过程设置的过程(通过事件)

时间:2013-08-06 08:04:55

标签: delphi

我希望在事件发生时执行一个过程。但该程序由另一个程序(SetNotifierProc)设定。

首先我运行:

SetNotifierProc(Proc1);

然后只要事件触发就执行Proc1

我如何编写SetNotifierProc来将过程作为参数以及如何通知事件处理程序执行该过程?

问题:我有一个TCPServerExecute,想要运行一个程序来显示收到的数据。但是因为我有多种形式,所以我想设置一个处理接收数据的程序。

由于

2 个答案:

答案 0 :(得分:3)

如果您的程序是没有参数的普通程序:

Type
  TForm1 = Class(TForm)
    ..
     private

     FMyProc : TProcedure;
   public
     procedure SetEventProc(aProc : TProcedure);
     procedure TheEvent( Sender : TObject);
  end;

procedure Test;
begin
  // Do something
end;

procedure TForm1.SetEventProc(aProc: TProcedure);
begin
  Self.FMyProc := aProc;
end;

procedure TForm1.TheEvent(Sender: TObject);
begin
  if Assigned(FMyProc) then
    FMyProc;
end;

// to set the callback to procedure "Test"
Form1.SetEventProc(Test);

如果您的过程有参数,请声明过程类型:

Type
  MyProcedure = procedure( aString : String);

如果您的程序是一种方法:

Type
  MyMethod = procedure( aString : String) of Object;

另请参阅有关Procedural types

的文档

答案 1 :(得分:0)

这应该可以解决问题: -

Type
  TTCPNotifyProc = Procedure(pData : String) Of Object;

TMyTCPServer = Class
Private
  FNotifyProc : TTCPNotifyProc;
..
Public
  Procedure SetNotifier(pProc : TTCPNotifyProc);
End;

Procedure TMyTCPServer.SetNotifier(pProc : TTCPNotifyProc);
Begin
  FNotifyProc := pProc;
End;

然后,只要您需要在服务器类中调用该过程,只需调用: -

If Assigned(FNotifyProc) Then
  FNotifyProc(DataStringReceived);