Zitat von
SirThornberry:
das es nicht genau eine instanz von TForm ist war mir klar aber eben ein Nachfahre.
Aber du schriebst was anderes:
SirThornberry
denn TFormClass.Create gibt dir ein TForm zurück und kein TFormClass. Dementsprechend kannst du den Rückgabewert von TFormClass.Create nur auf eine Variable vom Typ TForm zuweisen und nicht auf eine Variable vom Typ TFormClass.
Und das stimmt nicht bzw. hat er gemacht, da newForm vom Typ TForm ist. Mehr habe ich nicht anmerken wollen.
@Busybyte: Damit kannst du eine eine Methode nutzen um eine Klasse zu instanziieren ohne das ihr genauer Typ zur Designtime feststeht. Dieser kann erst zur Laufzeit ermittelt werden. Es ist sozusagen eine Variable die einen Klassentyp aufnehmen kann. Somit kannst du zur Laufzeit ohne den wirklichen Typ zu kennen eine Instanz bilden.
Bei deinem Ausgangsbeispiel wurde das in der Methode ShowForm genutzt um unabhängig von der später verwendeten Form das gewünschte Verhalten zu implementieren. Es hätte natürlich eine vorhandene Form Instanz gereicht, aber da er die Form auch erzeugt braucht er eine solche Klassenreferenz.
Aber hier dein Beispiel weniger "frei" und angepasst an dein spezielles Beispiel ohne TFormClass:
Delphi-Quellcode:
procedure TFrm_Main.ShowForm;
begin
newForm := TFrm_Startseite.Create(self);
newForm.BorderStyle := bsNone;
newForm.Parent := Panel_Content; // "In diesem Panel" werden die Forms angezeigt.
newForm.Align := alClient;
newForm.Show;
end;