3

相互に使用するレコードと多数のオブジェクト イベントの両方を宣言する方法を見つけようとしています。問題は、どのように宣言しても、「宣言されていない識別子」があることです。

以下のコードで、それらを相互に使用できるようにすることはできますか? イベントはオブジェクトで使用され、レコードはオブジェクトのコンストラクターに渡されて使用されます。

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

  TMyRecord = record
    OnMyEvent: TMyEvent;
  end;

これは可能ですか?Delphi 7 以降のすべてのバージョンで動作する必要があります。

4

2 に答える 2

14

より新しいバージョンの Delphi を使用している場合は、レコード内で型を宣言できます。イベントからレコードを参照する方法は次のとおりです。

type
  TMyRecord = record
  public type
    TMyEvent = procedure (Sender: TObject; var Rec: TMyRecord) of object;
  public
    OnMyEvent: TMyEvent;
  end;
于 2012-02-11T04:13:05.237 に答える
3

残念ながら、前方宣言はクラスに対してのみ許可され、レコードに対しては許可されないため、私が知っている唯一の方法は、ポインターを使用することです。

PMyRecord = ^TMyRecord;

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

TMyRecord = record
  OnMyEvent: TMyEvent;
end;
于 2012-02-11T02:33:45.847 に答える