| Autor |
Beitrag |
Der Jan
      
Beiträge: 98
Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
|
Verfasst: Di 15.11.05 11:10
Hallo,
gibt es eine Möglichkeit, in den Programmablauf einzugreifen, bevor TForm::OnCreate aufgerufen wird? Also im Pronzip direkt im Konstruktor des Formulars?
_________________ Gruß, Jan
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 15.11.05 11:31
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
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: 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; |
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Di 15.11.05 11:39
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 
      
Beiträge: 98
Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
|
Verfasst: 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  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 
_________________ Gruß, Jan
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 98
Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
|
Verfasst: Di 15.11.05 12:50
Äh... ja ok
genau das hab ich gesucht.... Hab das vorhin nur nicht ganz gerafft
Danke...
_________________ Gruß, Jan
|
|
|