![]() |
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:
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.
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; Also, würd mich freuen, wenn mir da jemand helfen könnte! MfG Mathis |
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.
|
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?? |
Re: Warten, bis Form vollständig geladen ist
Delphi-Quellcode:
Es werden also alle Messages abgearbeitet.
while ProcessMessage(Msg) do {loop};
Schau dir auch mal das ![]() |
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