Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bester Zeitpunkt zum Zugriff auf WinControls etc. (https://www.delphipraxis.net/129628-bester-zeitpunkt-zum-zugriff-auf-wincontrols-etc.html)

Satty67 22. Feb 2009 22:32


Bester Zeitpunkt zum Zugriff auf WinControls etc.
 
Hallo,

bisher habe ich WinControls im onCreate des jeweiligen ParentForm initialisiert.

Manche WinControls benötigen aber Daten aus einem anderen Form/DatenModul (bei mir meist nur das DatenModul). Die hab' ich dann im ParentForm.onActivate initialisiert (über Bool nur einmaliger Durchlauf der Initialisierung). Zumindest ging ich bisher davon aus, das MainForm.onActivate erst eintritt, wenn alle anderen Fenster samt enthaltener Objekte fertig initialisiert sind.

Jetzt hatte ich folgenden Fall:

MainForm mit DBGrid. Wird via Datasource/Query/Connection gefüllt, die alle in einem Datenmodul liegen.

Beim Start dann Peng... Zugriffsverletzung. Offenbar ist bei MainForm.onActivate eines der Datenzugriffs-Objekte im DatenModul noch nicht fertig initialisiert. Eine Abfrage, ob das entsprechende Datenzugriffs-Objekt bereit ist, verzögert wegen der nötigen Schleife den Programmstart erheblich.

Ich hab' zwei Alternativen getestet:

1) Timer im MainForm ruft eine Methode auf, die die Initialisierung vornimmt (die vorher in MainForm.onActivate war)
2) Application.onActivate enhält jetzt den Code von MainForm.onActivate

Beide Versionen funktionieren.

Wann ist sichergestellt, das alle Objekte aller automatisch erzeugten Fenster fertig erzeugt sind?

gemeni2005 23. Feb 2009 05:30

Re: Bester Zeitpunkt zum Zugriff auf WinControls etc.
 
Hallo,
ein sicherer Weg ist das Abwarten, bis die Botschaftswarteschlange arbeitet - diese wird erst von Application.Run initialisiert. Du könntest dir also eine UM_Nachricht an deine Mainform senden. Wenn diese ankommt, ist Application.Run angelaufen und somit alle automatisch erzeugten Formulare wurden vorher geladen und initialisert.
Robert

ULIK 23. Feb 2009 05:44

Re: Bester Zeitpunkt zum Zugriff auf WinControls etc.
 
Warum läßt Du die Formulare / Datenmodule automatisch erzeugen? Ich würde das nur für das Hauptformular machen und den Rest per Hand im OnCreate des Hauptformulars (Datenmodule die sofort benötigt werden) bzw. erst bei Bedarf. Außerdem is der OnActivate ein schlechter Moment: schreibst ja selbst, daß Du das mehrmalige Erzeugen dann unterbinden mußt. Besser OnCreate zw. OnShow.

Gruß,
Uli


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz