![]() |
Progressbar während Objekterzeugung aktualisieren
Hallo Delphianer,
vielleicht hat jemand von euch für folgendes Problem eine Lösung: Nachdem eine Anmeldemaske mit dem korrekten Kennwort ausgefüllt wurde, wird das Hauptformular (bestehend aus vielen Komponenten) erzeugt: Application.CreateForm(TfrmMain, frmMain); //Objekt erzeugen Da diese Erzeugung mehrere Sekunden dauert, wollte ich vor der Objekterzeugung eine Progressbar einschalten (als durchlaufende Marquee), um die Wartezeit optisch zu überbrücken. Leider wird während der Objekterzeugung die Progressbar nicht aktualisiert. Weiss jemand Rat? Gruß, Echtet |
AW: Progressbar während Objekterzeugung aktualisieren
Zitat:
|
AW: Progressbar während Objekterzeugung aktualisieren
Was dauert denn so lange? Die Erzeugung der Komponenten oder hast du da aus Versehen noch etwas in FormCreate oder so, das so lange dauert?
Grundsätzlich muss das Programm auch irgendwann zur Abarbeitung der WM_PAINT-Botschaften kommen, sonst aktualisiert auch nichts. Application.ProcessMessages bewirkt das. |
AW: Progressbar während Objekterzeugung aktualisieren
Hallo,
Hier erst mal etwas Code:
Delphi-Quellcode:
Ich habe nun zweimal das "Application.Processmessages" eingefügt, leider bringt es keine Verbesserung. Ich müsste eigentlich während der Objekterzeugt weitere Application.Processmessages einfügen. Aber wie geht das?
If DataModule1.IBDatabase.Connected = True then //wenn die Verbindung funktioniert...
begin Screen.Cursor := crAppStart; KlangAbspielen(login); ProgressBarLogin.Position := 0; ProgressBarLogin.MarqueeSize := 50; //Einschalten der ProgressBar Application.Processmessages; <-- hier zusätzlich eingefügt Application.CreateForm(TfrmMain, frmMain); //Objekt erzeugen Application.Processmessages; <-- hier zusätzlich eingefügt frmMain.Show; frmLogin.Visible := False; //Anmeldemaske ausblenden end; Zitat:
In FormCreate steht folgendes:
Delphi-Quellcode:
Ich werde mal die Zeiten für die obigen Befehle messen...
procedure TfrmMain.FormCreate(Sender: TObject);
begin LogEinschalten; //Verwendung der Komponente HotLog UngesicherteRegisterListe := TStringList.Create; //Liste erzeugen DokumentBMP := TBitmap.Create; //wegen Scanner-Funktionalität DokumentJPG := TJPEGImage.Create; Application.OnMessage := MyMsg; //wegen Scanner-Funktionalität TWOpenDSM(Application.Handle); //wegen Scanner-Funktionalität end; Gruß, Echtet |
AW: Progressbar während Objekterzeugung aktualisieren
Zitat:
Beim Erzeugen von Komponenten gibt es das Problem, dass jede neu erzeugte Komponente ein "Notification" Aufruf verursacht. Bei 200 Kompos wären das 1+2+3+...+199+200 Aufrufe. Der Zeitaufwand wächst also Quadratisch. |
AW: Progressbar während Objekterzeugung aktualisieren
Das OnCreate wird noch vor dem Anzeigen der Form aufgerufen ... wo nichts da ist, kann man wohl schlecht etwas anzeigen?
|
AW: Progressbar während Objekterzeugung aktualisieren
Hallo himitsu,
vielleicht stehe ich ja jetzt auf dem Schlauch... Zitat:
Oder habe ich Dich völlig falsch verstanden? Gruß, Echtet |
AW: Progressbar während Objekterzeugung aktualisieren
Richtig. Und wie soll eine Komponente etwas anzeigen können, wenn sie noch gar nicht existiert?
|
AW: Progressbar während Objekterzeugung aktualisieren
Stichwort: Splashscreen
|
AW: Progressbar während Objekterzeugung aktualisieren
Kannst du nicht etwas weniger auf einmal erzeugen. Es werden doch nicht gleich 200 Komponenten auf einmal sichtbar bzw. notwendig sein. HZier musst du evtl. etwas mehr Dynamik reinbringen.
Ansonsten muss sich eben jede Komponente melden, wenn sie fertig ist. Und dann kannst du auf einem extra Formular (z.B. Splash-Screen) den Fortschritt anzeigen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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