Pętla While i Progres

Pętla While i Progres
CI
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 17 lat
0

Chciałbym wyświetlić procent wykonania pętli While na progress Bar. Jak to zrobić ??


MrSquell
  • Rejestracja:ponad 22 lata
  • Ostatnio:10 miesięcy
0

hmmmmm zależy czy pętla while jest skończona ;] ludzie logicznie! jesli jest to wystarczy prosta proporcja (chyba wiesz co to??)
Potrzebujesz 1 zmiennej pomocniczej ktora bedzie ci zliczac ile razy zostala wykonana petla czyli moze to byc np. I (w petli koniecznie instrukcja Inc(I) albo I := I+1; ) . X to maksymalna ilosc powtorzen petli (z gory okreslona).

 X        100%

------ = -------
I Z%

czyli Z := (I*100) div X;

PrograssBar1.Possition := Z;

i w czym problem...?


Powodzenia! No comments, yet!
Wodzu
  • Rejestracja:około 23 lata
  • Ostatnio:około 10 lat
0

Z doswiadczenia wiem ze wyswietlanie postepu na progress barze zwalania potwornie wszystko...szczerze odradzam;>


"as above, so below..all things come from the one. Now You are the victim, carried by the wind, then rooted to the ground. If You want, to learn the secrets..close Your eyes..."
Numi
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 7 lat
0

i w czym problem...?

ano w tym chociażby, że jeśli pamięc mnie nie myli, to to nie zadziała :)
progress bar będzie 0, potem pętla się wykona do końca i dopiero 100% -
trzeba w pętli [najlepiej po zwiększeniu licznika bara] dodać Application.ProcessMessages; inaczej nie będzie obsługiwał repainta na bieżąco.


, tradycyjnie pozdrawiam - Numi.
pq
  • Rejestracja:około 23 lata
  • Ostatnio:około 14 lat
0

Bez sensu jest obliczać Z w każdym obrocie pętli. Lepiej ustawic granice Bara równe granicom pętli i ProgressBar.Position:=i;

a najlepiej robić żby nie zwalniac robić to co któryć obrót pętli np.

if ( mod 1000)=0 then
begin
Progressbar.Position:=i;
Application.ProcessMessages;
end;

zamist 1000 moze być co innego w zależności od czasochłonności petli.


"Ecie pecie - odparłem. - Wiadomo, że wszystkiemu winien komputer. Ten brzydal!" (Lem)
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
0

if ( mod 1000)=0 then

mod korzysta z instrukcji dzielenia - jedna z najwolniejszych instrukcji procesora... proponowałbym jakiś inny typ testowania.
Ot choćby zmienna bajt i testować, czy jest zerem - a co krok ją zwiększać o 1 - wtedy mamy prawdziwy warunek co 256 przejść - taki przykład tylko...


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.