AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warten, bis Form vollständig geladen ist

Ein Thema von mathis.h · begonnen am 4. Jan 2008 · letzter Beitrag vom 5. Jan 2008
Antwort Antwort
mathis.h

Registriert seit: 7. Jul 2007
Ort: Berlin
22 Beiträge
 
#1

Warten, bis Form vollständig geladen ist

  Alt 4. Jan 2008, 23:09
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Warten, bis Form vollständig geladen ist

  Alt 4. Jan 2008, 23:26
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mathis.h

Registriert seit: 7. Jul 2007
Ort: Berlin
22 Beiträge
 
#3

Re: Warten, bis Form vollständig geladen ist

  Alt 5. Jan 2008, 00:21
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??
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Warten, bis Form vollständig geladen ist

  Alt 5. Jan 2008, 00:43
  while ProcessMessage(Msg) do {loop}; Es werden also alle Messages abgearbeitet.

Schau dir auch mal das Tutorial zu SplashScreens von sakura an.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  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:10 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