如何创建将数据从一个单元发送到另一个单元的回调



我有Unit1.pas,它是我的主单元文件,还有另一个单元文件TimerUpdates.pas,它以编程方式接收事件,例如Timer1Timer(Sender: TObject);

我想知道,我如何实现回调,以及什么时候应该将它们用于其他方法?

现在我知道我可以用Unit1.Callback(Timer : TTimer);响应Timer1Timer(Sender: TObject);,这会调用它,但我更想知道为什么我应该或不应该使用它而不是其他回调方法。

还在学习。

试试这样的东西:

单元1.pas

uses
..., TimerUpdates;
procedure TMainForm.Callback(Timer : TTimer);
begin
...
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
TimerUpdates.OnTimerCallback := Callback;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
TimerUpdates.OnTimerCallback := nil;
end;

TimerUpdates.pas

interface
uses
..., ExtCtrls;
type
TCallback = procedure(Timer: TTimer) of object;
var
OnTimerCallback: TCallback;
implementation
...
procedure TSomeClass.Timer1Timer(Sender: TObject);
begin
if Assigned(OnTimerCallback) then
OnTimerCallback(TTimer(Sender));
end;
end.

对于分配事件过程,必须使用一些类过程来避免"方法指针和常规过程"问题。

您不需要创建新的类,可以使用TForm而不是myClass

单元1.pas:

unit Unit1;
interface
procedure CreateTimer;
implementation
uses Vcl.ExtCtrls, TimerUpdates;
type
TmyClass = class
procedure onTimer(Sender: TObject);
end;
var myClass : TmyClass;

procedure CreateTimer;
begin
Timer := TTimer.Create(nil);
Timer.Interval := 1000;
Timer.OnTimer := myClass.onTimer;
Timer.Enabled := True;
end;
{ TmyClass }
procedure TmyClass.onTimer(Sender: TObject);
begin
//do what you want
end;
end.

TimerUpdates.pas

unit Unit2;
interface
uses Vcl.ExtCtrls;
var
Timer: TTimer;
implementation
end.

相关内容

最新更新