La forma típica es guardar ese evento en una variable, y llamarla antes o despues del evento:
Código:
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FOldOnClick: TNotifyEvent;
procedure MiEvento(Sender: TObject);
public
end;
implementation
...
procedure TForm1.FormCreate(Sender: TObject);
begin
FOldOnClick := Button1.OnClick;
Button1.OnClick := MiEvento;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Hola Mundo!');
end;
procedure TForm1.MiEvento(Sender: TObject);
begin
if Assigned(FOldOnClick) Then
FOldOnClick(Self);
ShowMessage('¿Ok?');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Button1.OnClick := FOldOnClick;
end;
Obviamente este caso es algo inútil, esto se lo suele usar en algún componente que usa los eventos de otro objeto... Por eso lo del Destroy y el Assigned
Saludos!