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 Warten, bis Form vollständig geladen ist (https://www.delphipraxis.net/106075-warten-bis-form-vollstaendig-geladen-ist.html)

mathis.h 4. Jan 2008 22:09


Warten, bis Form vollständig geladen ist
 
Hallo!

Folgendes Problem:
Ich habe ein kleines Programm geschrieben, das aus zwei Forms besteht. Das eine enthält das Hauptprogramm. Nachdem auf einen Button geklickt wird, sollen mehrere Aktionen ausgeführt werden. Jetzt kommt das zweite Form ins Spiel. Dieses ist gewissermaßen ein Prozessformular, welches neben der Progress-Bar auch noch ein Label und ein TImage enthält. Das Problem liegt darin, dass offensichtlich die Aktionen, die nachdem ich das Prozessformular auf visible gesetzt habe, den Rechner so beanspruchen, dass er erst nach Beendigung derer (es sind einige HTTP-Aufrufe mithilfe der Indy-Komponente) das Formular vollständig anzeigt. Da dieses Formular nun aber den Prozess anzeigen soll, wäre es schön, wenn es schon VOR Beginn der Aktionen vollständig geladen wäre.
Meine Frage ist also, wie man das Programm dazu bringt, abzuwarten bis das Prozessformular vollständig angezeigt wird und erst dann die darunter stehenden Aktionen auszuführen.

Der Aufbau der Funktion, um die es geht ist folgender:
Delphi-Quellcode:
procedure TForm1.send;
begin
  ProgressForm.visible := true; //Das Prozessform, das vorher schon Created wurde sichtbar machen
  //   <- hier müsste gewartet werden
  while (IsSomething) do begin
    DoSomething;
    ProgressForm.NaechsterFertig; //Procedure, die die Progressbar aktualisiert
  end;
  ProgressForm.fertig; //Signalisiert, dass der Prozess abgeschlossen ist
  //momentan wird erst an dieser Stelle das Formular vollständig angezeigt
end;
Grundsätzlich ist es so, dass die Progress-Bar schon während des Vorgangs angezeigt wird und das Label (welches auch schon mit NaechsterFertig aktualisiert wird) und das TImages erst am Ende erscheinen.

Also, würd mich freuen, wenn mir da jemand helfen könnte!

MfG
Mathis

alzaimar 4. Jan 2008 22:26

Re: Warten, bis Form vollständig geladen ist
 
Ruf einfach hin und wieder 'Application.ProcessMessages' auf. Das Neuzeichnen eines Formulars bzw. Controls wird durch eine Windows-Nachricht initiiert. Diese landen in einer Warteschlange, und die muss abgearbeitet werden. Wenn die Application im Idle-Modus ist, also auf eine Eingabe vom Benutzer wartet, passiert das automatisch, aber wenn sie etwas tut, dann nicht. Also must du per Hand nachhelfen.

mathis.h 4. Jan 2008 23:21

Re: Warten, bis Form vollständig geladen ist
 
Vielen Dank. Funktioniert!

Eine Frage dazu noch:
Wird diese Warteschlange bei einmaligem Aufruf der genannten Funktion komplett abgearbeitet oder nur in Teilen? Kann es daher sein, dass ich bei "koplexeren" Formularänderungen sie mehrmals direkt hintereinander aufrufen muss??

dominikkv 4. Jan 2008 23:43

Re: Warten, bis Form vollständig geladen ist
 
Delphi-Quellcode:
  while ProcessMessage(Msg) do {loop};
Es werden also alle Messages abgearbeitet.

Schau dir auch mal das Tutorial zu SplashScreens von sakura an.


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