У меня есть пункт меню, и я пытаюсь назначить его OnClick
обработчик события:
miFrobGizmo.OnClick := {something};
Свойство обработчика события OnClick
, как и почти любой другой обработчик события, определяется как тип метода TNotifyEvent
:
property OnClick: TNotifyEvent
, где TNotifyEvent
:
TNotifyEvent = procedure(Sender: TObject) of object;
У меня есть объект, метод которого соответствует сигнатуре TNotifyEvent
:
TAnimal = class(TObject)
public
procedure Frob(Sender: TObject);
end;
Так что я думаю, что я должен иметь возможность взять метод объекта и присвоить его обработчику события click :
var
Animal: TAnimal;
miFrobGizmo.OnClick := Animal.Frob;
За исключением того, что я получаю ошибку:
[Error]File.pas(1234): Not enough actual parameters
Возможно, у меня пердит мозг, но я подумал, что смогу это сделать.
Деталь, которую я не упомянул, состоит в том, что мой объект, у которого есть метод сопоставления, имеет метод, представленный через интерфейс:
IAnimal = interface
procedure Frob(Sender: TObject);
end;
TAnimal = class(TInterfacedObject, IAnimal)
public
procedure Frob(Sender: TObject);
end;
var
Animal: IAnimal;
miFrobGizmo.OnClick := Animal.Frob;
Дополнительный вопрос
Если это не сработает, что будет?