Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Progressbar während Objekterzeugung aktualisieren (https://www.delphipraxis.net/161661-progressbar-waehrend-objekterzeugung-aktualisieren.html)

Echtet 14. Jul 2011 16:27

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

Luckie 14. Jul 2011 16:31

AW: Progressbar während Objekterzeugung aktualisieren
 
Zitat:

Zitat von Echtet (Beitrag 1111753)
Leider wird während der Objekterzeugung die Progressbar nicht aktualisiert.
Weiss jemand Rat?

Ohne Code wird es schwierig.

jaenicke 14. Jul 2011 16:38

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.

Echtet 14. Jul 2011 16:55

AW: Progressbar während Objekterzeugung aktualisieren
 
Hallo,

Hier erst mal etwas Code:

Delphi-Quellcode:
  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;
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?

Zitat:

Die Erzeugung der Komponenten oder hast du da aus Versehen noch etwas in FormCreate oder so, das so lange dauert?
Tja, es sind schon so ca. 200 Komponenten (auf mehreren Registerblättern verteilt).

In FormCreate steht folgendes:
Delphi-Quellcode:
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;
Ich werde mal die Zeiten für die obigen Befehle messen...

Gruß,
Echtet

shmia 14. Jul 2011 18:11

AW: Progressbar während Objekterzeugung aktualisieren
 
Zitat:

Zitat von Echtet (Beitrag 1111760)
Tja, es sind schon so ca. 200 Komponenten (auf mehreren Registerblättern verteilt

Das ist ein bisschen viel.
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.

himitsu 14. Jul 2011 18:26

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?

Echtet 14. Jul 2011 19:39

AW: Progressbar während Objekterzeugung aktualisieren
 
Hallo himitsu,

vielleicht stehe ich ja jetzt auf dem Schlauch...

Zitat:

Das OnCreate wird noch vor dem Anzeigen der Form aufgerufen ... wo nichts da ist, kann man wohl schlecht etwas anzeigen?
Ich muss doch erst das Formular mit Create erzeugen, bevor ich es mit Show anzeigen kann?

Oder habe ich Dich völlig falsch verstanden?

Gruß,

Echtet

Luckie 14. Jul 2011 20:13

AW: Progressbar während Objekterzeugung aktualisieren
 
Richtig. Und wie soll eine Komponente etwas anzeigen können, wenn sie noch gar nicht existiert?

omata 14. Jul 2011 20:18

AW: Progressbar während Objekterzeugung aktualisieren
 
Stichwort: Splashscreen

sirius 14. Jul 2011 21:24

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 02:11 Uhr.
Seite 1 von 2  1 2      

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