AGB  ·  Datenschutz  ·  Impressum  







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

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
6 Beiträge
 
#1

Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 19: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
Online

Registriert seit: 1. Feb 2018
2.095 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 19:43
Setz die Form.Visible Eigenschaft auf FALSE solange bis Du es mit TRUE anzeigen lässt.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Mario61

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

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 20: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 20:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg
Online

Registriert seit: 1. Feb 2018
2.095 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 20: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
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
113 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 20: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
6 Beiträge
 
#6

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 20: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.591 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 22: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
Alallart

Registriert seit: 8. Dez 2015
52 Beiträge
 
#8

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 22:56
@Mario61

Es gibt verschiedene Wege zum Ziel, der einfachste ist deine Message-Boxen in OnActivate oder OnShow Ereignisse zu legen. OnCreate wird beim erzeugen des Formulars ausgeführt, die anderen (je nach dem) erst beim Anzeigen.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg
Online

Registriert seit: 1. Feb 2018
2.095 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 16. Mai 2018, 23:11
Da Du über Application.CreateForm() FormX erzeugst brauchst Du Dir um sowas keine Gedanken machen, das verwaltet alles die Application Klasse. Worüber ich mir gerade eher Gedanken mache ist, was passiert wenn Du den Knopf zum Anzeigen von FormX mehrmals drückst, ob so Speicherlecks entstehen je nachdem was die Form so alles bereit hält? Also ich pers. würde Application.CreateForm() nur einmal benutzen und danach über Visible := True oder Show/ShowModal steuern. FormX beibringen das wenn es geschlossen wird lediglich ein Visible := False ausgeführt wird. Auf diese Weise wird nicht wieder und wieder die Form neu generiert. Ich hoffe das ich mich Verständlich ausgedrückt habe.
Da Du geschrieben hast das Deine FormX sehr lange braucht beim Programm-Start, vielleicht wäre es ja auch Sinnvoll einen Thread zu erstellen der in Deiner Hauptform ausgeführt wird, der erstellt alle Application.CreateForm() im Hintergrund und wenn Du die dann Anzeigen willst sind sie bereits geladen und schwupps aufm Bildschirm.
Das mit Deiner ShowMessage() kannst Du nur umgehen indem Du den FormCreate/Initialization Code in eine eigene Prozedur auslagerst und bei Bedarf diese Prozedure aus Deiner Hauptform aufrufen, das könnte zum Beispiel in dem Thread automatisch erledigt werden.
Der Vorteil wäre halt das Du von der Bedienung her kaum einen Unterschied spürst, alle Formulare sofort ansprechbar sind und Dein Programm beim Starten schön schnell sein könnte.
Es kommt halt auf Dein Programm und Sinn und Zweck an, das sollte halt nur ein Szenario abdecken.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
616 Beiträge
 
Delphi XE Professional
 
#10

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 06:01
Formulare auszuklammern um den Programmstart zu beschleunigen ist ein schneller Workaround, aber generell wäre es sinnvoller, FormCreate als constructor zu betrachten und zu behandeln, also entsprechend klein und definiert zu halten.

Daten laden etc. was für den Inhalt des Fensters wichtig ist geht auch später. Bei FormShow/FormActivate muss man schauen, dass das wiederholt getriggert werden kann... ich habe gute Erfahrungen mit dem ersten Aufruf von FormPaint, dann wird das Formular schon angezeigt). Dann muss man aber natürlich schauen, dass Interaktionen ggfls. noch disabled sind.

@KodeZwerg: die VCL ist aber nicht threadsicher, UI-Krams im Thread ist keine gute Idee Threads an sich sind natürlich innerhalb jeder einzelnen Form zum Laden der Daten oder ähnlich langwierigem dann wieder eine gute Idee.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf