如何声明包含使用record作为参数的事件的记录

时间:2012-02-11 02:17:52

标签: delphi types declaration cross-reference

我正在试图弄清楚如何声明记录和许多彼此使用的对象事件。问题是无论我声明它们的方式,我都有一个“未声明的标识符”。

因此,使用下面的代码,我可以让它们互相使用吗?事件将在对象中使用,记录将被传递并用于对象的构造函数。

  TMyEvent = procedure(Sender: TObject; var Rec: TMyRecord) of object;

  TMyRecord = record
    OnMyEvent: TMyEvent;
  end;

这可能吗?它需要适用于所有版本的Delphi 7及更高版本。

2 个答案:

答案 0 :(得分:14)

如果您使用的是更新的Delphi版本,则可以在记录中声明类型。以下是您从事件中引用记录的方法:

type
  TMyRecord = record
  public type
    TMyEvent = procedure (Sender: TObject; var Rec: TMyRecord) of object;
  public
    OnMyEvent: TMyEvent;
  end;

答案 1 :(得分:3)

不幸的是,前向声明只允许用于类而不是记录,因此我知道的唯一方法是使用指针:

PMyRecord = ^TMyRecord;

TMyEvent = procedure(Sender: TObject; Rec: PMyRecord) of object;

TMyRecord = record
  OnMyEvent: TMyEvent;
end;