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

- Rejestracja:ponad 22 lata
- Ostatnio:10 miesięcy
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...?

- Rejestracja:prawie 23 lata
- Ostatnio:około 7 lat
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.

- Rejestracja:około 23 lata
- Ostatnio:około 14 lat
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.

- Rejestracja:ponad 22 lata
- Ostatnio:około 4 godziny
- Lokalizacja:Poznań
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.