Did you know that you can get and set events with the TMethod record? Let’s assume you would like to hook an OnClose event of a form:
type
TMyHookObject = class
strict private
FOldOnClose: TMethod;
procedure OnClose(ASender: TObject; var AAction: TCloseAction);
...
procedure TMyHookObject.Init(AForm: TForm);
begin
//Save the old event
FOldOnClose := TMethod(AForm.OnClose);
//Set the new one
AForm.OnClose := OnClose;
end;
procedure TMyHookObject.OnClose(ASender: TObject; var AAction: TCloseAction);
begin
//Call the old event
if Assigned(FOldOnClose.Data) and Assigned(FOldOnClose.Code) then
TCloseEvent(FOldOnClose)(ASender, AAction);
//Run your own code
...
As you can see in the example you can easily store and call events with the help of TMethod.



