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 Ab wann taucht ein VCL-Formular in der Taskleiste auf? (https://www.delphipraxis.net/180175-ab-wann-taucht-ein-vcl-formular-der-taskleiste-auf.html)

Der schöne Günther 28. Apr 2014 13:27


Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Ein Projekt öffnet (unter Umständen) etwas ungeschickt direkt im
Delphi-Quellcode:
onCreate
des Hauptformulars einen
Delphi-Quellcode:
FileOpen
-Dialog.

Usability-Problem: Zu diesem Zeitpunkt existiert noch kein Eintrag in der Windows-Taskleiste. Der Benutzer kann so leicht verwirrt werden, von woher denn auf einmal dieser Auswahl-Dialog stammt.

Meine Frage: Ich dachte ich bin schlau, und packe das einfach ins
Delphi-Quellcode:
onShow
. Das ändert nichts. Ab wann kann ich denn jetzt eigentlich sicher sein, dass der Eintrag in der Taskleiste aufgetaucht ist?


PS: Mit XE6 hat sich bzgl. der Taskleiste ja angeblich einiges geändert. Es geht hier noch um XE5.

greenmile 28. Apr 2014 13:31

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Da ich das noch nie so richtig kapiert habe, aktiviere ich in solchen Fällen in FormCreate einen Timer mit einem Intervall von 200ms. Im "OnIntervall" deaktiviere ich ihn dann wieder und kann größtenteils sicher sein, dass die Form auch da ist. Pfusch, aber klappt.

stahli 28. Apr 2014 13:33

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Evtl. ginge es, das ins OnActivate zu setzen (und in einem Flag die erste Aktivierung zu vermerken).

himitsu 28. Apr 2014 13:34

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Eigentlich dachte ich dieser Eintrag wird vom Windows gemacht. Dann, wenn die Form sichtbar ist. :gruebel:


OldCreateOrder: Früher war das etwas anders.

Aber jetzt wird das Formular (eigentlich) erst nach dem OnCreate angezeigt. Während des OnCreate wird Visible:=... abgefangen und nicht an die Form durchgereicht. Nach dem OnCreate wird dann das Fenster erst richtig sichtbar.

OnShow ist nach dem Anzeigen. (Nach dem Erstellen oder nach dem Ändern des Visible)



Du könntest eventuell einen eigenen Dialog basteln, welcher einen eigenen Taskleisten-Eintrag bekommt (wenn es noch Keinen gibt).

baumina 28. Apr 2014 13:37

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Ich hab sowas auch im OnActivate drin mit Schalter FirstActivate.

Perlsau 28. Apr 2014 14:23

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Zitat:

Zitat von baumina (Beitrag 1257260)
Ich hab sowas auch im OnActivate drin mit Schalter FirstActivate.

Hat sich auch bei mir bewährt: In OnCreate wird die private Boolean-Variable StartModus auf True gesetzt, am Ende von OnShow (wird nach vor OnActivate aufgerufen) wieder auf False. Ein Aufruf Die Ereignisbehandlung von OnShow wird nur ausgeführt, wenn StartModus = True. Das ist auch in anderen Zusammenhängen wie z.B. dem aktivieren einer DB-Connection, um z.B. bestimmte Events zu verhindern, die erst nach dem Start aktiviert werden sollen, recht nützlich.

Zum Verständnis: OnCreate des Hauptformulars wird nur einmal aufgerufen, OnActivate und OnShow können u.U. auch mehrfach aufgerufen werden.

Will man ganz sicher sein, das der Aufbau der Form vor dem Anzeigen eines Dialogs abgeschlossen ist, hilft ein Application.ProcessMessages vor dem Aufruf des Dialogs.

himitsu 28. Apr 2014 14:26

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Zitat:

Zitat von Perlsau (Beitrag 1257266)
Will man ganz sicher sein, das der Aufbau der Form vor dem Anzeigen eines Dialogs abgeschlossen ist, hilft ein Application.ProcessMessages vor dem Aufruf des Dialogs.

Hilft aber nicht im OnCreate, denn damit wird der Code dort ja angehalten, aber die Form wird dennoch erst nach dem Ende des OnCreate-Ereignisses fertiggestellt.
(Witzig ist nur, daß z.B. ein ShowModal im OnCreate funktioniert, auch wenn noch nicht alles fertig ist)

Perlsau 28. Apr 2014 14:46

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Zitat:

Zitat von himitsu (Beitrag 1257267)
Zitat:

Zitat von Perlsau (Beitrag 1257266)
Will man ganz sicher sein, das der Aufbau der Form vor dem Anzeigen eines Dialogs abgeschlossen ist, hilft ein Application.ProcessMessages vor dem Aufruf des Dialogs.

Hilft aber nicht im OnCreate, denn damit wird der Code dort ja angehalten, aber die Form wird dennoch erst nach dem Ende des OnCreate-Ereignisses fertiggestellt.
(Witzig ist nur, daß z.B. ein ShowModal im OnCreate funktioniert, auch wenn noch nicht alles fertig ist)

:thumb: Selbstverständlich sollte man im OnCreate generell weder Anzeige-Ereignisse auslösen noch auf andere Formulare (z.B. Datenmodul) zugreifen – lezteres deshalb nicht, weil weitere Formulare gewöhnlich erst erzeugt werden, nachdem das Hauptformular erzeugt wurde und man ansonsten eine Zugriffsverletzung riskiert.

Oben hatte ich mich leider vertan, denn die Reihenfolge der Ereignisse sieht tatsächlich folgendermaßen aus:

1. OnCreate
2. OnShow
3. OnActivate
4. OnPaint

Der schöne Günther 28. Apr 2014 15:21

AW: Ab wann taucht ein VCL-Formular in der Taskleiste auf?
 
Toll, Danke :thumb:

Das hilft mir bestens. Jetzt weiß ich wohl endlich, wie man es richtig macht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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