Autor Beitrag
Der Jan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Di 15.11.05 11:35 
im Source code des Projectes !

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  Application.Initialize;
  //also hier
  Application.CreateForm(TForm1, Form1);
  Application.Run;

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Di 15.11.05 11:39 
user profile iconDer 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
BeitragVerfasst: Di 15.11.05 12:33 
user profile iconNarses 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.

user profile iconchrisw hat folgendes geschrieben:
im Source code des Projectes !

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  Application.Initialize;
  //also hier
  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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 15.11.05 12:40 
user profile iconDer 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
BeitragVerfasst: Di 15.11.05 12:50 
Äh... ja ok

genau das hab ich gesucht.... Hab das vorhin nur nicht ganz gerafft :roll:

Danke...

_________________
Gruß, Jan