Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Statusbar - Fortschritt ausgeben (https://www.delphipraxis.net/164684-statusbar-fortschritt-ausgeben.html)

gallstone 24. Nov 2011 18:22

Statusbar - Fortschritt ausgeben
 
Hi,

wie ja einige wissen bau ich gerade an einem Programm welches Textdateien aus den Zeilen einer Tabelle erzeugt.
Das Programm an sich funktioniert.
Nun möchte ich noch einen kleinen optischen Effekt hinzufügen (ich weiß ist Spielerei ^^):

In der Statusbar soll der Fortschritt angezeigt werden:

OK lassen wir die Berechnung außen vor.
Mein Programm läuft in einer While-Schleife (solange Memofeld mehr Zeilen als 0 enthält läuft die Schleife, vorm Neustart der Schleife lösche ich immer die erste Zeile).
Vor dem Neustart der Schleife soll der Status in der Statusbar angezeigt werden.
Habe hierzu einfach mal einen Platzhalter "Test" genommen + Sleep(200) (Das Programm läuft sonsts innerhalb von 0,5 Sekunden durch ^^).

nur leider wird der "Test" erst ganz am Ende des Programms/Schleife in der Statusbar angezeigt, also dann wenn das Programm fertig ist...:

Code:
   
sleep(200);
StatusBar1.Panels[0].Text:='Test';
habt ihr eine Idee woran das liegen kann?
Funktioniert das überhaupt wie ich mir das vorstelle?

Sollte ich das über eine Funktion machen?

Grüße!

TKanne 24. Nov 2011 18:27

AW: Statusbar - Fortschritt ausgeben
 
Hi,

so müsste es gehen:

Delphi-Quellcode:
sleep(200);
StatusBar1.Panels[0].Text:='Test';
Application.ProcessMessages;
Grüße
TKanne

stahli 24. Nov 2011 18:34

AW: Statusbar - Fortschritt ausgeben
 
Du könntest einmal
Delphi-Quellcode:
StatusBar1.Panels[0].Refresh;
versuchen.

Alternativ könnte man auch eine ProgressBar für die Fortschrittsanzeige nutzen.

gallstone 24. Nov 2011 20:29

AW: Statusbar - Fortschritt ausgeben
 
Hi,

cool danke euch.
probier das glatt morgen früh gleich aus :)

jaenicke 24. Nov 2011 23:17

AW: Statusbar - Fortschritt ausgeben
 
Wobei eine solche Fortschrittsanzeige den Prozess deutlich verlangsamen kann. Deshalb macht es wenig Sinn eine Operation, die sonst in einem Bruchteil einer Sekunde durchläuft alleine durch die Statusanzeige ggf. um Sekunden zu verlängern.

Um das zu verhindern kannst du z.B. nur alle 100 oder 1000 Einträge oder so den Status aktualisieren, je nachdem wie lange die einzelnen Operationen dauern.

gallstone 28. Nov 2011 13:34

AW: Statusbar - Fortschritt ausgeben
 
Hi,

danke für den Einwand. Denke aber nicht, dass dies für mich eine Rolle spielt.

Im höchstfall geht es hier um 100 Zeilen... So dass sich das in Grenzen hält.

Grüße!

Ansonsten hat:

Code:
Application.ProcessMessages;
geklappt

Code:
StatusBar1.Panels[0].Refresh;
klappt leider nicht, .Refresh gibts bei mir nicht (D7).

Grüße!

Uwe Raabe 28. Nov 2011 16:42

AW: Statusbar - Fortschritt ausgeben
 
Zitat:

Zitat von gallstone (Beitrag 1138231)
.Refresh gibts bei mir nicht (D7).

Versuch doch alternativ mal
Delphi-Quellcode:
Update
.


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