![]() |
Verwendung einer ProgressBar
Hi,
ich muss eine ganze Rehe von Nummern crunchen. Die beginnen bei X und enden bei Y. Das kann gfls. echt lange dauern. Nun habe ich da eine TProgressBar eingebaut: ProgressBar.Min := X; Progressbar.Max := Y; ProgressBar.Step := 1; for X := 1 to Y do begin irgendwas... ProgressBar.StepIt; ProgressBar.Update; end; Funktioniert soweit richtig gut. NUR...die Bar verzögert das Numbercruching um ganze Größenordnungen. Wie kann man das Teil beschleunigen oder gibt es eine schnellere Möglichkeit? Manni |
AW: Verwendung einer ProgressBar
Zitat:
|
AW: Verwendung einer ProgressBar
Hallo,
wie groß ist denn Y? ich würde z.B. nicht jeden Schritt (Number) das Stepit machen. Wenn Du z.B. 10.000 Numbers hast, ändert sich in der Anzeige doch nichts. Nimm eine lokale Variable zum Zählern der Numbers und zum Berechnen des prozentualen Fortschritts. Und dann sowas wie PG.Min:= 0; PG.Max:= 100;
Delphi-Quellcode:
Der PG würde also nur alle 5% deiner Numbers aktualisiert werden.
if Numbers mod iCountPercent = 5 then
begin PG aktualisieren end; |
AW: Verwendung einer ProgressBar
[DEL "Falsches "Langsam" zuerst im Kopf gehabt und zuspät weitergelesen"]
Das ist eine Verbesserung des OS, die animieren die Ausgabe langsam beim Hochzählen. Es gibt aus den Delphi-Demos ein vorinstalliertes TGauge, da es von Borland vor Jahrzehnten entwickelt wurde, ist dort auch rein garnichts optimiert oder verbessert wurden und demnach malt es seinen Zustand auch sehr schnell. :stupid: Ansonsten bleibt nur Eines, denn Rückwärts wird umgehend aktualisiert.
Delphi-Quellcode:
[/DEL]
ProgressBar.Position := ProgressBar.Position + 2; // bzw. ProgressBar.StepBy(2);
ProgressBar.Position := ProgressBar.Position - 1; // ProgressBar.StepBy(-1); ProgressBar.Update; // oder ProgressBar.Position := ProgressBar.Max - 1; ProgressBar.Position := Zähler; ProgressBar.Update; Jupp, wenn es viele Schritte sind, die extrem schnell durchlaufen, dann ist das Überspringen ein sehr guttes Mittel, damit deine Fortschrittsanzeige nicht alles unnötig extrem ausbremst. Wobei ich hier lieber mit einem zeitlichen Interval (100-500 Millisekunden) arbeite, anstatt mit einem festen Abstand, der überall anders schnell/langsam ist.
Delphi-Quellcode:
T := GetTickCount;
for .... if Integer(GetTickCount - T) > 250 then begin T := GetTickCount; ProgressBar.Position := i; ProgressBar.Update; end; end; ProgressBar.Position := Max; // wenn Anzeige nach Ende noch sichtbar bleibt |
AW: Verwendung einer ProgressBar
Danke für den Hinweis mit %, das ist tatsächlich deutlich schneller.
Manni |
AW: Verwendung einer ProgressBar
Das mit den Ticks ist anahezu optimal. Die Verzögerung ist tolerabel.
Danke für die brauchbaren Antworten! Manni |
AW: Verwendung einer ProgressBar
Warum extra rumrechnen?
Delphi-Quellcode:
for start := 1 to ende do
begin if start mod start = 5 then begin // mach was |
AW: Verwendung einer ProgressBar
Hab ich da etwas übersehen?
x mod x sollte immer 0 ergeben ? Gruß K-H |
AW: Verwendung einer ProgressBar
Korrekt.
Die Methode mit den Ticks ist allerdings DEUTLICH schneller (1-2 Größenordnungen). Manni |
AW: Verwendung einer ProgressBar
Mist. Ich sollte nicht versuchen zu programmieren mit starken Schmerzmitteln intus und Fentanyl Schmerzpflastern. :roll:
Wie würde denn meine Idee richtig umgesetzt aussehen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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 by Thomas Breitkreuz