我希望在事件发生时执行一个过程。但该程序由另一个程序(SetNotifierProc
)设定。
首先我运行:
SetNotifierProc(Proc1);
然后只要事件触发就执行Proc1
。
我如何编写SetNotifierProc
来将过程作为参数以及如何通知事件处理程序执行该过程?
问题:我有一个TCPServerExecute
,想要运行一个程序来显示收到的数据。但是因为我有多种形式,所以我想设置一个处理接收数据的程序。
由于
答案 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);