AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Progressbar synchron zu rechenintensiven Code laufen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Progressbar synchron zu rechenintensiven Code laufen lassen

Ein Thema von Alex_ITA01 · begonnen am 2. Aug 2005 · letzter Beitrag vom 11. Aug 2005
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Progressbar synchron zu rechenintensiven Code laufen lassen

  Alt 2. Aug 2005, 08:14
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Progressbar synchron zu rechenintensiven Code laufen las

  Alt 2. Aug 2005, 09:25
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
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#3

Re: Progressbar synchron zu rechenintensiven Code laufen las

  Alt 2. Aug 2005, 11:41
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von BTeam
BTeam

Registriert seit: 17. Sep 2003
Ort: Nordhausen
52 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Progressbar synchron zu rechenintensiven Code laufen las

  Alt 2. Aug 2005, 12:13
naja meiner Meinung nach tut es ein einfaches Panel mit dem Text "Sortiere...bitte waren" drauf auch.
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Progressbar synchron zu rechenintensiven Code laufen las

  Alt 2. Aug 2005, 13:25
oder eine kleine warteanimation a la
|
\
-
/
|
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#6

Re: Progressbar synchron zu rechenintensiven Code laufen las

  Alt 2. Aug 2005, 13:56
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:
Progressbar.Visible := True;
MyStringGrid.Sort; // -> solange wie diese Funktion dauert soll die Progressbar sich "zeichnen"
Progressbar.Visible := False;
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Progressbar synchron zu rechenintensiven Code laufen las

  Alt 2. Aug 2005, 20:08
Zitat von Alex_ITA01:
Wann soll die Animation wieder ausgestellt werden, wenn die "Sort-Procedure" unterschiedlich lange dauern kann?

So?

Delphi-Quellcode:
Progressbar.Visible := True;
MyStringGrid.Sort; // -> solange wie diese Funktion dauert soll die Progressbar sich "zeichnen"
Progressbar.Visible := False;
ach so, du lässt einen TList-Abkömmling das Sortieren übernehmen? na dann wird das mit dem fortschritt in prozent schwierig, da diese .Sort-routine ja keine auskunft darüber gibt, wie weit sie ist. aber wenn du einfach nur eine progressbar haben willst, die immer wieder durchläuft, mach doch sowas:

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?)
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#8

Re: Progressbar synchron zu rechenintensiven Code laufen las

  Alt 11. Aug 2005, 09:51
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 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