Как объявить запись, содержащую события, которые используют запись в качестве параметра - PullRequest
3 голосов
/ 11 февраля 2012

Я пытаюсь выяснить, как объявить как запись, так и число событий объекта, которые используют друг друга. Проблема не в том, каким образом я их объявляю, у меня есть «необъявленный идентификатор».

Итак, с помощью приведенного ниже кода я могу заставить их использовать друг друга? События будут использоваться в объекте, а запись будет передана и использована в конструкторе объекта.

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

  TMyRecord = record
    OnMyEvent: TMyEvent;
  end;

Возможно ли это? Он должен работать во всех версиях Delphi 7 и выше.

Ответы [ 2 ]

14 голосов
/ 11 февраля 2012

Если вы используете более новую версию Delphi, вы можете объявлять типы в записях. Вот как вы можете ссылаться на запись с вашего мероприятия:

type
  TMyRecord = record
  public type
    TMyEvent = procedure (Sender: TObject; var Rec: TMyRecord) of object;
  public
    OnMyEvent: TMyEvent;
  end;
3 голосов
/ 11 февраля 2012

К сожалению, предварительные объявления разрешены только для классов, но не для записей, поэтому я знаю только один способ - использовать указатели:

PMyRecord = ^TMyRecord;

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

TMyRecord = record
  OnMyEvent: TMyEvent;
end;
...