Die Anwendung wird
nicht aufgehalten, wenn die Aktionen in einem Thread erfolgen (speichern, laden, umrechnen)
Zum Schließen des Tabs musst du eigentlich rein gar nichts machen ... ok bis auf eins:
Delphi-Quellcode:
type
TDockForm = clas( TForm )
protected
// Ich könnte auch den Event OnClose nehmen, da ich aber von dieser Form
// weitere ableiten möchte, ist dieser Weg etwas robuster :o)
procedure DoClose( var Action: TCloseAction ); override;
end;
TDockFormClass = class of TDockForm;
procedure TDockForm.DoClose( var Action: TCloseAction );
begin
Action := caFree;
inherited; // <- dort wird der Event OnClose gefeuert
end;
Wenn du jetzt das Formular schließt, dann wird es durch das Setzen von
Action := caFree
auch automatisch zerstört, was wiederum automatisch den Tab aus dem PageControl entfernt
Vorausgesetzt, die Form wird auch so dort eingedockt:
Delphi-Quellcode:
procedure TMyForm.DockNewForm( APageControl : TPageControl; ADockFormClass : TDockFormClass );
var
LForm : TDockForm;
begin
LForm := TDockFormClass.Create( APageControl );
try
LForm.ManualDock( APgeControl, nil, alClient );
LForm.Visible := True;
LForm := nil;
finally
LForm.Free;
end;
end;
Wenn du diese
TDockForm
als Basis für deine weiteren DockFOrms nimmst, dann kannst du nach Belieben dort die unterschiedlichsten DockForms an dein PageControl hängen und diese werden dann beim Schließen automatisch aufgeräumt und der Tab geschlossen