Das es nicht aufgerufen wird, hat einen anderen Grund:
Deine überschrieben Methode wird nicht vom Formular aufgerufen, weil sie an dieser Stelle ja nicht weiß, dass in einem Nachfahren diese Prozedur überschrieben wird!
Mein Vorschlag:
Delphi-Quellcode:
type
TSomeForm = class(TForm)
private
FOnBeforeClose: TNotifyEvent;
procedure WMClose(var Message: TMessage); message WM_CLOSE;
published
property OnBeforeClose: TNotifyEvent read FOnBeforeClose write FOnBeforeClose;
end;
{...}
procedure TSomeForm.WMClose(var Message: TMessage);
begin
if Assigned(FOnBeforeClose) then
FOnBeforeClose(Self);
inherited;
end;
Wenn du allerdings an dieser Stelle auch die CloseAction haben willst, dann musst du dir das in der Prozedur zusammenpulen.
Btw. Es gibt das Event CloseQuery, das ist quasi das BeforeClose-Event. Dort kannst du das Schließen des Fensters noch verhindern, wenn du das willst.