Wann ist die Initialisierung komplett?
-
- Beiträge: 458
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Wann ist die Initialisierung komplett?
Gibt es ein Ereignis zum Zeitpunkt, wenn die Initialisierung der Mainform und aller Forms, die beim Programmstart automatisch erstellt werden, abgeschlossen ist? Beim FormCreate des Hauptformulars wohl nicht, das wird glaube ich aufgerufen, bevor das Hauptformular mit seinen Komponenten erstellt wird - oder irre ich mich da?
Derzeit behelfe ich mir mit einem Timer, der im Formcreate für 2 Sekunden gestartet wird und hoffe, dass dann alles fertig ist - aber wirklich elegant ist diese Vorgangsweise nicht.
Derzeit behelfe ich mir mit einem Timer, der im Formcreate für 2 Sekunden gestartet wird und hoffe, dass dann alles fertig ist - aber wirklich elegant ist diese Vorgangsweise nicht.
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 296
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Wann ist die Initialisierung komplett?
Moin!
In der Datei Projektname.lpr werden alle Formulare erzeugt und danach Application.Run aufgerufen.
Ich habe stumpf vor Application.Run noch einen eigenen Funktionsaufruf eingefügt. Funktioniert.
In der Datei Projektname.lpr werden alle Formulare erzeugt und danach Application.Run aufgerufen.
Ich habe stumpf vor Application.Run noch einen eigenen Funktionsaufruf eingefügt. Funktioniert.
- af0815
- Lazarusforum e. V.
- Beiträge: 6651
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Wann ist die Initialisierung komplett?
Der meiner Meinung nach sicherste Zeitpunkt ist der erste Aufruf von ApplicatioShow. Dort habe ich meinen Initialisierung Aufruf. Und dort, nur dort, werden auch die anderen Forms, wenn nötig erzeugt.
Warum das ganze:
Es ist konsistent über alle Betriebssysteme und Widgets
Man hat hier eine ganz genaue Kontrolle über die erstellten Forms
Es ist zu diesem Zeitpunkt wirklich alles initialisiert
Ich kann hier schon eigene Configs einlesen und damit meine anderen Forms mit Parametern versorgen
Datenbank Verbindungen können hier sauber erstellt werden, EV. geprüft werden ob der Server vorhanden ist
...
Beim FormDestroy mache ich das ganze in verkehrter Reihenfolge
Das funktioniert seit Jahren(Jahrzehnten) und hatte damals schon bei Delphi funktioniert.
Warum das ganze:
Es ist konsistent über alle Betriebssysteme und Widgets
Man hat hier eine ganz genaue Kontrolle über die erstellten Forms
Es ist zu diesem Zeitpunkt wirklich alles initialisiert
Ich kann hier schon eigene Configs einlesen und damit meine anderen Forms mit Parametern versorgen
Datenbank Verbindungen können hier sauber erstellt werden, EV. geprüft werden ob der Server vorhanden ist
...
Beim FormDestroy mache ich das ganze in verkehrter Reihenfolge
Das funktioniert seit Jahren(Jahrzehnten) und hatte damals schon bei Delphi funktioniert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1034
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Wann ist die Initialisierung komplett?
ich hab das ähnlich wie Jorg3000 gelöst.
Einfach auch weil ich im Splashscreen auch Infos aus dem Initialisierungsprozess anzeigen will.
MyGlobalInit kümmert sich um alle nötigen DB-Verbindungen, applikationsweite Einstellungen, Logging und GUI.

Code: Alles auswählen
Application.Scaled:=True;
RequireDerivedFormResource := True;
Application.Initialize;
frmSplashScreen := TfrmSplashScreen.Create(Application);
try
frmSplashScreen.Show;
frmSplashScreen.Update;
Application.ProcessMessages; // to be sure to show the splash screen
MyGlobalInit;
Application.CreateForm(TfrmMain, frmMain);
frmSplashScreen.Hide;
finally
frmSplashScreen.Free;
end;
Application.Run;
Einfach auch weil ich im Splashscreen auch Infos aus dem Initialisierungsprozess anzeigen will.
MyGlobalInit kümmert sich um alle nötigen DB-Verbindungen, applikationsweite Einstellungen, Logging und GUI.
wie kommst du da ran? Gibt es da ein Event in das man schreiben kann? Merke gerade wieder, ich bin nach wie vor bei vielen Themen blankaf0815 hat geschrieben: Do 23. Jan 2025, 07:46 sicherste Zeitpunkt ist der erste Aufruf von ApplicatioShow.

- Zvoni
- Beiträge: 250
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Wann ist die Initialisierung komplett?
Jepp.theo hat geschrieben: Do 23. Jan 2025, 11:06 S.a. hier: https://wiki.freepascal.org/Execute_act ... m_is_shown
Ich maches es in der Regel per OnActivate mit Sperrvariablen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 458
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: Wann ist die Initialisierung komplett?
Ah, da ist ja sogar mein (für meine Vorstellungen etwas dilettantischer) Timer-Ansatz auch als eine Möglichkeit beschriebentheo hat geschrieben: Do 23. Jan 2025, 11:06 S.a. hier: https://wiki.freepascal.org/Execute_act ... m_is_shown

Danke für die Antworten, die Idee mit dem OnActivate gefällt mir eigentlich am besten.
Der Splash-screen, im dem gleichzeitig die Startup-Aktivitäten angezeigt werden, ist aber auch eine gute Idee.
- af0815
- Lazarusforum e. V.
- Beiträge: 6651
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Wann ist die Initialisierung komplett?
Richtig gemacht, ist der nicht diletantisch. Macht nur Sinn wenn man das ganze verzögert initialisieren will. Man muss nur wiederum aufpassen, das der Timer zum richtigen Zeitpunkt enabled wird. Einfach nur automatisch enablen lassen, kann da wiederum ins Auge gehen, weil nicht alles von den Komponeneten bereits initialisiert bzw. vorhanden sein muß.braunbär hat geschrieben: Do 23. Jan 2025, 14:32Ah, da ist ja sogar mein (für meine Vorstellungen etwas dilettantischer) Timer-Ansatz auch als eine Möglichkeit beschriebentheo hat geschrieben: Do 23. Jan 2025, 11:06 S.a. hier: https://wiki.freepascal.org/Execute_act ... m_is_shown![]()
Das OnActivate hat sich bei mir seit den frühen Delphi Zeiten als stabil erwiesen, auch über die verschiedenen Betriebssystem und Widgetset sist diese Methode entsprechend stabil.braunbär hat geschrieben: Do 23. Jan 2025, 14:32 Danke für die Antworten, die Idee mit dem OnActivate gefällt mir eigentlich am besten.
Der Splash-screen, im dem gleichzeitig die Startup-Aktivitäten angezeigt werden, ist aber auch eine gute Idee.
Den Splashscreen mach ich ganz speziell, das ist bei mir ein SIngleton, der sich aber wenn das Programm in Ruhe kommt auch selbst deaktivieren kann. Vielleicht liefere ich den Code dafür mal im Forum. Geht damit echt gut und man kann auch Fortschrittsbalken, Infos etc. damit anzeigen und den Benutzer das gefühl geben, da wird was im Hintergrund echt gearbeitet

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1571
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Wann ist die Initialisierung komplett?
Vielleicht kann man ja mal einen FeatureRequest einreichen, daß ein Event OnApplicationReady oder so eingeführt wird.
- af0815
- Lazarusforum e. V.
- Beiträge: 6651
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Wann ist die Initialisierung komplett?
Wozu ? Vor allen, wer soll das werfen ? Man beachte die verschiedensten Möglichkeiten wie eine Applikation starten kann.fliegermichl hat geschrieben: Do 23. Jan 2025, 16:19 Vielleicht kann man ja mal einen FeatureRequest einreichen, daß ein Event OnApplicationReady oder so eingeführt wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 3175
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Wann ist die Initialisierung komplett?
Das Timer-Event wird doch vom Widget ausgelöst und in Application.Run abgearbeitet. Bis dahin sind alle (automatisch erzeugten) Formulare vollständig. Weitere Initialisierung natürlich ausgenommen.af0815 hat geschrieben: Do 23. Jan 2025, 16:12Richtig gemacht, ist der nicht diletantisch. Macht nur Sinn wenn man das ganze verzögert initialisieren will. Man muss nur wiederum aufpassen, das der Timer zum richtigen Zeitpunkt enabled wird. Einfach nur automatisch enablen lassen, kann da wiederum ins Auge gehen, weil nicht alles von den Komponeneten bereits initialisiert bzw. vorhanden sein muß.braunbär hat geschrieben: Do 23. Jan 2025, 14:32Ah, da ist ja sogar mein (für meine Vorstellungen etwas dilettantischer) Timer-Ansatz auch als eine Möglichkeit beschriebentheo hat geschrieben: Do 23. Jan 2025, 11:06 S.a. hier: https://wiki.freepascal.org/Execute_act ... m_is_shown![]()
Wenn der Timer sein Event explizit aufruft, wenn er auf aktiv gestellt wird, hast du ein Problem.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein