Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - [TForm] - Was kommt vor OnCreate
Der Jan - Di 15.11.05 11:10
Titel: [TForm] - Was kommt vor OnCreate
Hallo,
gibt es eine Möglichkeit, in den Programmablauf einzugreifen, bevor TForm::OnCreate aufgerufen wird? Also im Pronzip direkt im Konstruktor des Formulars?
Narses - Di 15.11.05 11:31
Moin!
Das FormCreate() ist der Constructor des Formulars, noch konstruktiver geht´s also nicht mehr. :wink:
Du kannst in der Applikation selbst, also im .dpr natürlich noch eingreifen, da wird das FormCreate doch auch ausgelöst.
cu
Narses
chrisw - Di 15.11.05 11:35
im Source code des Projectes !
Delphi-Quelltext
1: 2: 3: 4:
| Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; |
Robert.Wachtel - Di 15.11.05 11:39
Titel: Re: [TForm] - Was kommt vor OnCreate
Der Jan hat folgendes geschrieben: |
| [...] gibt es eine Möglichkeit, in den Programmablauf einzugreifen, bevor TForm::OnCreate aufgerufen wird? Also im Pronzip direkt im Konstruktor des Formulars? |
Naja, Du könntest dem Formular einen eigenen Konstruktor verpassen und Deinen Code vor einem
inherited einbringen. Noch früher geht wohl kaum ;-)
Der Jan - Di 15.11.05 12:33
Narses hat folgendes geschrieben: |
Moin!
Das FormCreate() ist der Constructor des Formulars, noch konstruktiver geht´s also nicht mehr.
Du kannst in der Applikation selbst, also im .dpr natürlich noch eingreifen, da wird das FormCreate doch auch ausgelöst.
cu
Narses |
FormCreate ist IMO nicht direkt der Konstruktor... Es wird aufgerufen, nachdem der ganze Kram bereits erzeugt wurde. Beispiel: ich erzeuge eine Klasse, die verschiedene Checks z.b. beim Ändern von Editfelder durchführt. Solche "Änderungen" treten auch auf, wenn die Editfelder als Childs des Formulars erzeugt werden. Da ich meine Klasse aber erst bei OnCreate des Formulars erzeuge, gibt dies u.U. Zugriffsverletzungen.
chrisw hat folgendes geschrieben: |
im Source code des Projectes !
Delphi-Quelltext 1: 2: 3: 4:
| Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; | |
Ähm, das ist nicht ganz, was ich meine :wink: Das ist zu früh.
Im C-Builder lässt sich das schön trennen. Man hat einmal den Konstruktor, wo man solche Sachen, wie oben als Beispiel genannt, tun kann, und dann noch FormCreate, falls man es noch braucht.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
void __fastcall TForm1::FormCreate(TObject *Sender) {
} |
Ist nicht ganz einfach zu erklären :)
jaenicke - Di 15.11.05 12:40
Der Jan hat folgendes geschrieben: |
Im C-Builder lässt sich das schön trennen. Man hat einmal den Konstruktor, wo man solche Sachen, wie oben als Beispiel genannt, tun kann, und dann noch FormCreate, falls man es noch braucht.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
void __fastcall TForm1::FormCreate(TObject *Sender) {
} |
Ist nicht ganz einfach zu erklären :) |
Das ist doch aber genau das, was Robert.Wachtel gemeint hat! Du überschreibst einfach den Konstruktor (constructor Create(uOwner: TComponent); override;), dann kannst du da alles machen. Mit inherited; musst du aber auch den originalen Konstruktor aufrufen, entweder vor oder nach deinem Code.
Wichtig: Das Formular und alles was drin ist, ist beim Eintritt in den überschriebenen Konstruktor noch nicht vorhanden, erst mit inherited ist überhaupt was da.
Aber das ist ja genau dasselbe wie in deinem Code-Snippet von C++ bzw. C#...
Der Jan - Di 15.11.05 12:50
Äh... ja ok
genau das hab ich gesucht.... Hab das vorhin nur nicht ganz gerafft :roll:
Danke...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!