.Loaded() sollte der richtige Ort sein
Was ich vielleicht noch anmerken muss: Ich verwende außer für das Hauptfenster "MainForm" keine grafischen Komponenten. Die baue ich direkt im Quellcode zusammen.
Ich habe jetzt mal beide Prozeduren, also
procedure TForm1.Loaded;
und
TForm1.AfterConstruction;
, eingebaut und bin dann das Programm mit "F7" im Single Step-Modus durchgegangen.
procedure TForm1.Loaded;
wird aufgerufen,
bevor das Programm in
procedure TMainForm.FormCreate(Sender: TObject);
verzweigt. Zu diesem Zeitpunkt sind meine grafischen Elemente noch nicht gebaut.
TForm1.AfterConstruction;
wird aufgerufen,
nachdem procedure TMainForm.FormCreate(Sender: TObject);
abgearbeitet ist und wieder verlassen wurde. Zu diesem Zeitpunkt sind alle über den Quellcode erstellten grafischen Elemente bereits gebaut.
Ich weiß nicht, ob das wichtig ist.
Allerdings ist es so, dass in beiden Fällen der Compiler an der Stelle
Parent := AParent;
die Fehlermeldung: "Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000." bringt.
Zum Zeitpunkt des Aufrufs von
Daten:=TDaten.Create(self, self, Test); //TDaten.Create(Aowner:TComponent; AParent:TWinControl; Irgendwas: EigenerDatentyp);
zeigt der Compiler (wenn man mit dem Mauszeiger darüber fährt) für den ersten Parameter / das erste
self
: s. Datei "Inhalt_Aowner_TComponent_vorher.jpg" und für den zweiten Parameter / das zweite
self
: s. Datei "Inhalt_AParent_TWinControl_vorher.jpg".
Springt man mit "F7" in die Routine hinein zeigt der Compiler folgendes für den ersten Parameter: s. Datei "Inhalt_Aowner_TComponent_nachher.jpg" und für den zweiten Parameter: s. Datei "Inhalt_AParent_TWinControl_nachher.jpg (14,9 KB)".
Vielleicht hilft das weiter...