gpt4 book ai didi

function - 传递函数而不是调用它(Delphi)

转载 作者:行者123 更新时间:2023-12-03 15:09:07 25 4
gpt4 key购买 nike

所以我在 Delphi 中有一个表单

TFrmMainForm = class(TForm, IFrmMainFormInterface)
public
procedure Display(Sender:TObject);
end;

界面是

IFrmMainFormInterface = interface
procedure Display(Sender:TObject);
end;

还有另一个类

TMainFormViewModel = class
strict private
fTimer : TTimer;
function GetOnTimer : TNotifyEvent;
procedure SetOnTimer(timerEvent : TNotifyEvent);
public
property OnTimer : TNotifyEvent read GetOnTimer write SetOnTimer;
end;

implementation

function TMainFormViewModel.GetOnTimer : TNotifyEvent;
begin
Result := fTimer.OnTimer;
end;

procedure TMainFormViewModel.SetOnTimer(timerEvent : TNotifyEvent);
begin
fTimer.OnTimer := timerEvent;
end;

我有一个表单 MainForm 实例和 View 模型类 MainFormViewModel

我想尝试

MainFormViewModel.OnTimer := IFrmMainFormInterface(MainForm).Display

问题是这给了我一条错误消息

Not enough actual parameters

我相信这是因为delphi 试图调用显示函数而不是将其分配给OnTimer 事件。我不知道如何解决这个问题,我尝试使用 @ 运算符但没有成功。

编辑

我应该补充一点,MainForm 在此函数中声明为

procedure Initialise<T:Class, IFrmMainFormInterface>(MainForm : T);
<小时/>
procedure TController.Initialise<T>(MainForm : T);
begin
MainFormViewModel.OnTimer := IFrmMainFormInterface(MainForm).Display ;
end;

最佳答案

MainFormViewModel.OnTimer := IFrmMainFormInterface(MainForm).Display;

问题是您无法在此上下文中使用接口(interface)的方法。 OnTimer 事件是一个of object 方法类型。它必须是对象或记录的方法。

关于function - 传递函数而不是调用它(Delphi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25989921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com