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/)
-   -   MDI-Fenster - Erzeugung (https://www.delphipraxis.net/204287-mdi-fenster-erzeugung.html)

skoschke 15. Mai 2020 11:37

MDI-Fenster - Erzeugung
 
Hallo,

bei einer MDI-Anwendung habe ich das Problem, dass die MDI-Fenster in ihrem Create einigen Code abzuarbeiten haben, der ca. 1/2 sec. dauert.
Wird nun per Menü-Klick ein solches Fenster erzeugt (deren Windowstate = wsMaximized) dann erscheint das Fenster erst normal im Haupfenster und vergrößert sich dann nach der 1/2 sec.

Das sieht sehr unschön aus und ich versuche vergeblich dies abzustellen, allerdings ohne jeglichen Erfolg.

Jegliches Repaint bringt nichts, Visible false ist nicht erlaubt, wie kann man das Problem beheben?

Ciao
Stefan

Uwe Raabe 15. Mai 2020 11:52

AW: MDI-Fenster - Erzeugung
 
Zitat:

Zitat von skoschke (Beitrag 1464622)
Visible false ist nicht erlaubt

Auch nicht, wenn du es im Objektinspektor setzt?

Delphi.Narium 15. Mai 2020 11:54

AW: MDI-Fenster - Erzeugung
 
Unelegante Lösung:

Code aus dem Create raus.
Dort einen Timer aktivieren (Interval durch probieren ermitteln) und in seinem OnTimerEreignis dann den aus dem Create entfernten Code ausführen.

Mach ich so in der Art bei Programmen, deren Create ... beim Programmstart sonst zulange dauern würde (z. B. wenn dort 'ne Datenbankverbindung aufgebaut werden soll, diverse Konfigurationsdateien zu lesen sind ...). Eventuell kannst Du sowas ja auch nutzen.

Diese Krücke aber bitte erst in Betracht ziehen, wenn Uwes Rat nicht funktioniert.

himitsu 15. Mai 2020 12:04

AW: MDI-Fenster - Erzeugung
 
Sowas Langes nicht im Create machen.

@Uwe Raabe:
MDI-Fenster sind immer sichtbar, drum sind sie im Create immer schon sichtbar. (man kann sie maximal minimieren)
Visible=False ist wirklich nicht erlaubt.

Uwe Raabe 15. Mai 2020 12:21

AW: MDI-Fenster - Erzeugung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu (Beitrag 1464630)
@Uwe Raabe:
MDI-Fenster sind immer sichtbar, drum sind sie im Create immer schon sichtbar. (man kann sie maximal minimieren)
Visible=False ist wirklich nicht erlaubt.

Komisch, wenn ich über dem MDI-Wizard ein Projekt (siehe Anhang) erzeugen lasse und im FormCreate des Child-Forms folgenden Code einsetze,
Delphi-Quellcode:
  Sleep(2000);
  WindowState := wsMaximized;
dann öffnet sich das Fenster nach zwei Sekunden in voller Größe.

Es ist also offenbar kein generelles Problem, sondern wird durch den aktuell verwendeten Code oder irgendwelche Einstellungen verursacht.

himitsu 15. Mai 2020 13:06

AW: MDI-Fenster - Erzeugung
 
OnCreate/FormCreate wird erst im AfterConsructor ausgelöst, also lange nachdem die Form schon erstellt wurde. (genug Zeit für viel Spaß)
Da MDI-Childs nicht invisible sein dürfen, wird die Form ab dem Inherited des Constructors potentiell sichtbar.

Du hast wohl noch Glück, dass du nichts auf der Form hast, was auf das FormHandle zugreift oder einen Repaint auslöst, schon während des Ladens, und damit die Anzeige aktualisiert, bzw. das interne Windows-Form (HWND) sofort erstellt.

skoschke 18. Mai 2020 07:55

AW: MDI-Fenster - Erzeugung
 
Klingt nicht gut, da werde ich doch mal Frames ins Auge fassen...

Ciao
Stefan


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