![]() |
gelöst: Application.CreateForm
Hallo,
irgendwie ist mir der Sinn der Ausführung von TApplication.CreateForm schleierhaft. Ich hoffe ihr könnt mir da weiterhelfen, ich bin nämlich schier am verzweifeln. Mir geht es da nur um den ersten Teil. Die Zuweisung der MainForm (ausgeblendet) ist soweit klar. Meine Frage ist nun, warum hier die Speicherreservierung mit NewInstance dem Aufruf des Konstruktors vorweggenommen wird? :wall: Gruss
Delphi-Quellcode:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var Instance: TComponent; begin Instance := TComponent(InstanceClass.NewInstance); TComponent(Reference) := Instance; try Instance.Create(Self); except TComponent(Reference) := nil; raise; end; |
Re: Application.CreateForm
ist ganz einfach. :)
Stell dir einen Constructor als Funktion vor. Wenn du folgendes aufrufst:
Delphi-Quellcode:
so bekommt die Variable Instanzvariable den Wert erst zugewiesen wenn die Funktion zurück gekehrt ist.
Instanzvariable := Funktion_Gib_mir_Instanz();
Jetzt wird aber bei Forms das OnCreate aufgerufen und das im Constructor. Das heißt man könnte im Construktor nicht auf die Variable Form1 zugreifen weil diese ja erst ihren Wert bekommt wenn der Constructor zurück kehrt. Dadurch das aber bei CreateForm erst der Speicher angefordert und der Variablen zugewiesen wird, und dann erst der Constructor aufgerufen wird kann man innerhalb des Constructors bereits auf die Variable zugreifen. Zugegeben wäre mir es lieber wenn dies nicht ginge denn es ist nicht im Sinne der OOP das man auf eine globale Variable zugreift wenn man ebenso mit Self arbeiten kann. |
Re: Application.CreateForm
Danke. Verstehe..
Das ist ja schrecklich!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz