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

时间:2021-06-15 12:35:56

标签: delphi

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

我想知道,如何实现回调,以及何时应该使用它们而不是其他方法?

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

还在学习中。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

Unit1.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.

答案 1 :(得分:-1)

为了分配你的事件过程,你必须使用一些类过程来避免“方法指针和常规过程”问题。

你不需要创建一个新的类,你可以使用 TForm 代替 myClass

Unit1.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.