![]() |
Progressbar synchron zu rechenintensiven Code laufen lassen
Hallo erstmal,
ich wollte mal fragen, ob es möglich ist, eine Progressbar synchron zu einem rechenintensiven Programmcode laufen zu lassen? Hört sich komisch an aber ich meine das so: Ich habe ein Stück Code, der unterschiedlich lange dauern kann und ich weiß nicht wie lange (darin wird eine Liste sortiert aber unter bestimmten Kriterien). Je nachdem wie lang die Liste ist, kann es auch unterschiedlich lang dauern. Jetzt will ich aber, dass der Benutzer nicht denkt, es passiert nichts, eine Progressbar einblenden, die ihre Balken genau zur Geschwindigkeit des Programcode zeichnet. Also wenn die Routine fast fertig ist, dann soll die Progressbar fast voll sein und eben auch umgedreht und so weiter. Nur wie macht man sowas? MFG Alex |
Re: Progressbar synchron zu rechenintensiven Code laufen las
Guten Morgen. Da du "eine Liste sortierst", gehe ich davon aus, dass du eine Schleife verwendest. Wenn du die Anzahl der Schleifendurchläufe kennst, kann du vor dem Ausführen (Im Code also direkt vor der Schleife) die "Max" Eigenschaft der Progressbar auf die Anzahl der Schleifendurchläufe setzen und dann bei jedem Durchlauf den aktuellen Wert der Bar erhöhen.
Wenn du dem Benutzer nur signalisieren willst, dass dein Programm "nicht nichts macht", könnte es auch schon reichen, einfach mit einem Timer die Progressbar zu füllen, zu leeren, und wieder zu füllen. Also in etwa so, wie es z.B. beim Windows XP Bootscreen zu sehen ist. Man liest sich, Stanlay :hi: |
Re: Progressbar synchron zu rechenintensiven Code laufen las
Das mit dem Timer und der immerwieder durchlaufenden Progressbar ist eine gute Idee.
Das mit der Schleife funktioniert nicht ganz, weil das Sortieren in einer seperaten Komponente ausgeführt wird (QuickSort...) und die Progressbar soll nur in diesem Programm aufgerufen werden. Aber gute Idee,danke. MFG Alex |
Re: Progressbar synchron zu rechenintensiven Code laufen las
naja meiner Meinung nach tut es ein einfaches Panel mit dem Text "Sortiere...bitte waren" drauf auch. :)
|
Re: Progressbar synchron zu rechenintensiven Code laufen las
oder eine kleine warteanimation a la
| \ - / | ;) |
Re: Progressbar synchron zu rechenintensiven Code laufen las
Ja klingt auch gut.Danke.
Problem ist nur, ich rufe eine Komponente auf, die sortieren soll und ich weiß noch nicht so ganz, wie ich das jetzt umsetzen soll... Zur Zeit ist es in etwa so (habe den Source nicht parat): - es wird auf eine bestimmte Zelle in einem StringGrid geklickt - dann wird sortiert (MyStringGrid.Sort) - und während dieser ".Sort" Procedure möchte ich diese Animation... Wann soll die Animation wieder ausgestellt werden, wenn die "Sort-Procedure" unterschiedlich lange dauern kann? So?
Delphi-Quellcode:
MFG Alex
Progressbar.Visible := True;
MyStringGrid.Sort; // -> solange wie diese Funktion dauert soll die Progressbar sich "zeichnen" Progressbar.Visible := False; |
Re: Progressbar synchron zu rechenintensiven Code laufen las
Zitat:
Delphi-Quellcode:
,
ProgressBar1.Visible := True;
Timer1.Enabled := True; MyStringGrid.Sort; Timer1.Enabled := False; ProgressBar1.Visible := False; und im OnTimer-event lässt du dann einfach die progrssbar immer weiter laufen (bzw. zurücksetzen wenn sie den maximalwert erreicht hat). wenn du wirklich willst, dass die progressbar den tatsächlichen fortschritt des sortierens zurückgibt, wirst du selber den sortieralgo schreiben müssen. wobei ich nicht glaube dass man z.b. beim QuickSort einen eindeutigen Fortschritt angeben kann (bei Bubblesort sollte das gehen, aber der wird wohl etwas zu langsam sein, oder?) |
Re: Progressbar synchron zu rechenintensiven Code laufen las
ja, BubbleSort wird wohl zu langsam sein...
aber ich werde es mit der ständig durchlaufenden Progressbar machen. Das ist die einfachste und schnellste Lösung. Danke nochmals, MFG Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 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