Ja. Zugegeben, man muss man sich einmal merken ob das OnActivate nun schon mal stattgefunden hat oder nicht:
Delphi-Quellcode:
type
TBaseForm = class(TForm)
procedure FormActivate(Sender: TObject);
private var
firstActivateHappened: Boolean;
public
procedure initGUI(); virtual;
end;
procedure TBaseForm.initGUI();
begin
// Empty
end;
procedure TBaseForm.FormActivate(Sender: TObject);
begin
if (not firstActivateHappened) then begin
initGUI();
firstActivateHappened := True;
end;
inherited;
end;
Die Hilfsvariablensteuerung kann man sich sparen, wenn sich die Ereignis- Routine selbst vom Objekt/Instanz abkoppelt.
Delphi-Quellcode:
type
TBaseForm = class(TForm)
procedure FormActivate(Sender: TObject);
public
procedure initGUI(); virtual;
end;
procedure TBaseForm.initGUI();
begin
// Empty
end;
procedure TBaseForm.FormActivate(Sender: TObject);
begin
OnActivate = nil;
initGUI();
firstActivateHappened := True;
inherited;
end;
Die selbe Funktionalität wie oben, nur mit weniger Code.