To ja jeszcze dorzucę kod pozwalający wywołać metodę już zdefiniowaną pod Memo1.OnMouseMove oraz zdarzenie z normalnej procedury. Mój przykład dotyczy OnExecute ale nie ma znaczenia co się podepnie :)
Najpierw definiujemy typ:
type
OnExecuteOld = procedure(Sender: TObject) of object;
Następnie w klasie definiujemy sobie procedurę oraz obiekt naszego typu:
type
TfmMain = class(TForm)
private
procedure BeforeExecuteSave(Sender: TObject);
public
{ Public declarations }
OldSaveProc:OnExecuteOld;
end;
Następnie w onShow (lub gdzie komu wygodniej) zapisujemy do naszego OldSaveProc dotychczasowe zdarzenie:
procedure TfmMain.FormShow(Sender: TObject);
begin
OldSaveProc := Designer.SaveCmd.OnExecute;
Designer.SaveCmd.OnExecute := BeforeExecuteSave;
end;
i najważniejsze nasza nowa procedura BeforeExecuteSave:
procedure TfmMain.BeforeExecuteSave(Sender: TObject);
begin
inherited;
//To co potrzebujemy i następnie oryginalne wywołanie zdarzenia
OldSaveProc(Sender);
//i kolejne operacje po wywołaniu zdarzenia
end;
W kilku sytuacjach ta konstrukcja uratowała mi życie :)