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

Delphi 调用由另一个过程设置名称的过程(通过事件),delphi,Delphi,我希望在事件发生时执行一个过程。但该过程由另一个过程设置(SetNotifierProc) 首先,我运行这个: SetNotifierProc(Proc1); 然后每当触发事件时执行Proc1 如何编写代码SetNotifierProc以获取过程作为参数,以及如何通知事件处理程序执行该过程 问题:我有一个TCPServerExecute,想运行一个过程来显示收到的数据。但是因为我有多个表单,所以我想设置一个过程来处理接收到的数据 谢谢如果您的过程是没有参数的普通过程: Type TForm

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

首先,我运行这个:

SetNotifierProc(Proc1);
然后每当触发事件时执行
Proc1

如何编写代码
SetNotifierProc
以获取过程作为参数,以及如何通知事件处理程序执行该过程

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


谢谢

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

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;

另请参阅有关的文档。

这应该可以实现以下目的:-

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);

将过程引用存储到变量中,并在事件处理程序方法内调用该引用?很好,但是该变量的数据类型是什么?如何做到这一点?例如,TMyProc=过程(AParam:Integer);工作。非常感谢(我使用了
TProc
而不是
TProcedure
,因为在我的例子中
Test
是一种类方法)