Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi gelöst: Application.CreateForm (https://www.delphipraxis.net/103915-geloest-application-createform.html)

jethark 24. Nov 2007 01:08


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;

SirThornberry 24. Nov 2007 07:56

Re: Application.CreateForm
 
ist ganz einfach. :)
Stell dir einen Constructor als Funktion vor.
Wenn du folgendes aufrufst:
Delphi-Quellcode:
Instanzvariable := Funktion_Gib_mir_Instanz();
so bekommt die Variable Instanzvariable den Wert erst zugewiesen wenn die Funktion zurück gekehrt ist.

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.

jethark 24. Nov 2007 15:19

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