我希望在发生事件时执行一个过程。但是该过程是由另一个过程( 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;

另请参阅有关 Procedural types 的文档。

关于delphi - 调用名称由另一个过程设置的过程(通过事件),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18074760/

10-14 18:20
查看更多