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
Benutzerbild von Zacherl
Zacherl

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

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
172 Beiträge
 
#2

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

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

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
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#4

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
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 07:30
@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.
Gibt es einen Grund so etwas zu behaupten? Hauptform nicht im extra-Thread aber die Sub-Forms die man bei Start nicht benötigt. Bei Thread-Ende sollte erst der "Zeige FormX" Knopf aktiviert werden. Was sollte daran schiefgehen?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 07:35
@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.
Gibt es einen Grund so etwas zu behaupten? Hauptform nicht im extra-Thread aber die Sub-Forms die man bei Start nicht benötigt. Bei Thread-Ende sollte erst der "Zeige FormX" Knopf aktiviert werden. Was sollte daran schiefgehen?
Das ist Allgemeinwissen. Die Windows-Handels sind alle nur im erstellenden Thread gültig.
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 08:06
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.
Ahh ok, ich Versteh worum es geht und gebe in solcher Situation Recht! (wobei ich oft ein "if assigned()" als prüfer einsetze)
Aber auch ein "if assigned()" ist manchmal nicht sicher, das ist mir auch schon ab und zu aufgefallen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 09:03
Aber auch ein "if assigned()" ist manchmal nicht sicher, das ist mir auch schon ab und zu aufgefallen.
Vermutlich wenn dein (globale?) Variable nicht mit FreeAndNil wieder genullt wird.
Assigned prüft nur ob die Varible ein Null-Pointer ist, nicht ob ein gültiges Objekt dahinter hängt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Beim Programmstart werden alle Units abgearbeitet

  Alt 17. Mai 2018, 07:42
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.
Sehe ich umgekehrt. Wenn ich Formulare beim Programmstart nicht benötige, so werden diese nicht erstellt.
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 ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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:45 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