![]() |
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
|
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
Erstellst du nun irgendwelche Formular in einem Thread, so wird es dann krachen wenn auf globale Instanzen (Screen-Objekt, Application, ...) zugegriffen wird, welche nicht in diesem Thread erstellt wurde. Das gemeine ist das es lange Zeit gut gehen kann, aber dann auf einmal permaent der Programmstart mit Exceptions unterbrochen wird. |
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
Da brauch ich dann auch nicht (aufwändig) die Ladefunktion in FormCreate und FormShow/Activate aufteilen. Wäre auch ungünstig wenn wir alle 100 Formulare beim start schon anlegen würden und dann (damals unter Win9x) dann gleich in Ressourcenprobleme laufen würden ... |
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
Aber auch ein "if assigned()" ist manchmal nicht sicher, das ist mir auch schon ab und zu aufgefallen. |
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
Assigned prüft nur ob die Varible ein Null-Pointer ist, nicht ob ein gültiges Objekt dahinter hängt. |
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
Der Initialisaton-Abschnitt jeder Unit wird immer beim Laden der Anwendung/DLL ausgeführt. Constructor und OnCreate jeder Form wird immer beim Erstellen Jener ausgeführt. Und wenn du beim Programmstart alle Forms automatisch erstellen lässt, dann ist das deine Schuld. (Projektoptionen bzw. die zugehörigen CreateForm in der DPR) OnShow/OnActivate wird bei jenen Forms ausgeführt, welche angezeigt werden und den Eingabefokus bekommen. (die MainForm und alle die Visible=True in der DFM haben) Die einzige wirkliche Lösung wurde ja schon genannt: Forms erst dann dynamisch erstellen, wenn sie auch verwendet werden. |
AW: Beim Programmstart werden alle Units abgearbeitet
Bei allem Verständnis für gute Ideen, so stellt sich hier immer die Frage über wie viele Forms wir hier sprechen? Bei 100, da ist jede gute Idee besser als die andere, aber vermutlich spricht der TE von zwei oder drei Formularen. Die machen den Speicher voll, und der Ladevorgang ist nicht merklich.
Auf High-Level Niveau sind das alles tolle Ideen, aber so wie ich das verstehe hat der TE noch keine große Erfahrung mit OnCreate, OnShow und OnActivate. Jeder der Ereignisse wird zu einer unterschiedlichen Zeit und in einer Reihenfolge ausgeführt, man muss also das nehmen was da ist. Zuerst an TE, es gibt kein Ereignis das etwas ausführt wenn OnCreate fertig ist. Das Formular wird erst dann erzeugt, wenn alles in der Prozedur OnCreate abgearbeitet wurde. Eine ShowMessage in OnCrate wird also angezeigt bevor das Formular angezeigt wird. Egal ob man alle drei Formulare am Anfang erzeugt oder dynamisch später. Und Activate wird ausgeführt wenn die Applikation, bzw. Fenster den Fokus erhält. Bei ShowModal merkt man den Unterschied zu OnShow nicht, bei Show schon, denn dann erhällt das Fenster öfter den Fokus. OnShow wird jedes Mal angezeigt wenn das Fenster neu angezeigt wird. Und sollte es nötig sein, dass das ShowMessage nur einmal angezeigt wird, kann man noch eine globale boolean Variable dafür nehmen die prüft ob es es das erste mal ist, dass ShowMessage angezeigt wird. Man kann das Problem also auch simpel lösen. Bei drei Fenstern. |
AW: Beim Programmstart werden alle Units abgearbeitet
Ich glaube das showmessage war nur ein Analyse-Tool des TE. Da würd ich mich nicht dran festbeißen.
Da ja viele Wege nach Rom führen, hier mal meine üblicherweise benutzter: Ausser beim Mainform, schmeiße ich die globale Variable in jeder Form-Datei weg. Nur das Mainform wird dann in der dpr erzeugt. Wird auf der Mainform dann ein Button oder Menü geklickt, dass ein neues Form erzeugt, dann: - Soll es ein Modales Form sein, so gibt es dafür eine Variable in der (vereinfacht) Button-Click-Prozedur und das Form lebt nur innerhalb dieser Prozedur, wird am Ende also frei gegeben. - Ist es ein nicht Modales Form oder soll es ggf. öfter benutzt werden (und dabei z.b. nicht seine Inhalte verlieren), so gibt es eine Variable in der MainForm für dieses Form und es wird dann per Lazy-Load erstellt und angezeigt, so wird es nur erzeugt wenn es gebraucht wird, ist aber wiederverwendbar, wenn es denn bereits erzeugt wurde. |
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
Gruß K-H |
AW: Beim Programmstart werden alle Units abgearbeitet
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz