Pętla While i Progres

0

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

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...?

0

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

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.

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.

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...

1 użytkowników online, w tym zalogowanych: 0, gości: 1