AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Beim Programmstart werden alle Units abgearbeitet
Thema durchsuchen
Ansicht
Themen-Optionen

Beim Programmstart werden alle Units abgearbeitet

Ein Thema von Mario61 · begonnen am 16. Mai 2018 · letzter Beitrag vom 17. Mai 2018
Antwort Antwort
Seite 1 von 2  1 2      
Mario61

Registriert seit: 10. Jan 2010
19 Beiträge
 
#1

Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 20:39
Hallo,

ich habe 3 Formulare (Form1, Form2, Form3) ebenfalls exitieren dazu die Units (Unit1, Unit2, Unit3)
In jedem Formular befindet sich ein ShowMessage('xyz'). Beim Starten des Programmes werden alle MessagesBoxes angezeigt, noch bevor das erste Formular angezeigt wird.

Warum ?
Wie kann man das verhindern ?
Ich möchte in jeder Unit / Formular eigene unabhängige Routinen definieren, die nicht gleich beim Programmstart ausgefürt werden sollen.
Was muss ich tun ?
Gruß Mario
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 20:43
Setz die Form.Visible Eigenschaft auf FALSE solange bis Du es mit TRUE anzeigen lässt.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Mario61

Registriert seit: 10. Jan 2010
19 Beiträge
 
#3

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 21:03
Hallo,

Ich habe in Form2 eine MessageBox die erscheinen soll wenn ich Form2 über einen Button in Form1 öffne. Ob Form2 Visible =TRUE oder FALSE ist, die MessageBox aus Form2 erscheint noch vor Form1. Damit wird die Routine show Messagebox aus Form2 schon vor dem Ansprechen von Form2 geöffnet. Warum? Form2 ist noch gar nicht dran ! Das darf doch so nicht sein, oder?

Macht doch einfach mal ein neues Projekt mit einem Formular, dort irgend ein Label mit irgend einem Text, dann ein zweites Formular und in diesem ein ShowMessage('YXZ').
Dann passiert das !!! Warum ?

Gruß Mario.
Gruß Mario

Geändert von Mario61 (16. Mai 2018 um 21:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 21:21
Geh in deine .dpr Datei, da nimm alle Forms raus die beim starten nicht erscheinen sollen inkl. deren Code.
In deinem Knopf für "Zeige FormX" da platziere eine FormX.Create().
Das ist nur der Grundgedanke. Ein paar mehr Befehle müssen es dann schon sein.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 21:24
Hallo,

in welchen Event der jeweiligen Form hast du das ShowMessage?
Wie sieht deine Projektdatei (DPR) aus?
Werden hier alle 3 Forms erzeugt? Wenn ja warum?
Ich lass nur das Hauptformular automatisch erzeugen.
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat
Mario61

Registriert seit: 10. Jan 2010
19 Beiträge
 
#6

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 21:49
Hallo,
da haben wir es... die DPR-Datei... ich habe mit dieser noch nie rumhantiert. In meinem Projekt habe ich 10 Formulare und 10 Units... Der Start des Programms hat ewig gedaurt. In der DPR-Datei habe ich alle ausgeklammert die ich zum Start nicht benötige. Der Start des Programms hat sich rapide erhöht. Den Aufruf der Formulare habe ich dann diese aus der DPR-Datei entnommen. Das funktioniert jetzt alles wunderbar. Ich danke Euch... Kleine Frage dennoch, wenn ich ein Formular mit Beispielsweise Application.CreateForm(TFrmKonfig, FrmKonfig) geöffnet habe, muss ich es nach Beendigung irgend wie wieder schließen ?

Danke und Gruß Mario
Gruß Mario
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 23:04
Über Projekt -> Projektoptionen -> Formulare kann man auch in der IDE direkt einstellen, welche Formulare automatisch erzeugt werden sollen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#8

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 10:10
In jedem Formular befindet sich ein ShowMessage('xyz'). Beim Starten des Programmes werden alle MessagesBoxes angezeigt, noch bevor das erste Formular angezeigt wird.

Warum ?
Wie kann man das verhindern ?
Ich möchte in jeder Unit / Formular eigene unabhängige Routinen definieren, die nicht gleich beim Programmstart ausgefürt werden sollen.
Was muss ich tun ?
Erstmal hattest du vergessen zu sagen wo das ShowMessage drin ist. (aber die Glaskugel hat es einfacher, da es nicht so viele Stellen gibt)


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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#9

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 10:45
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.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 10:57
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.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 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 by Thomas Breitkreuz