Skocz do zawartości
mathias79

Odswieżanie Zawartości Komponetów Tlabel

Rekomendowane odpowiedzi

witam

mam taki oto sobie kodzik:

 

void __fastcall TTestForm::StartButtonClick(TObject *Sender){ProgressBar1->Max = this->iloscTestow;this->numerTestu = 1;if(wylPop && ustOpcje)        {        for(int i=0; i<this->iloscTestow; i++)                {                NrTestLabel->Caption = IntToStr(numerTestu);                this->numerTestu++;                ProgressBar1->StepIt();                }        }else MessageBox(NULL, "Nie ustawiono opcji bądź nie wylosowano populacji !!", "UWAGA !", MB_OK);}
to oczywiście sam szkielet ale chodzi o to aby w Label->Caption był wyświetlany numer przeprowadzanego testu.

Tymczasem dopiero po zakończeniu testów tam pojawia się oczekiwany numer zaś w czasie trwania testów tkwi tam cały czas zero ..

czy jest w biulderze coś w rodzaju "upadatedata" z visuala ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Z pytania wnioskuje ze program sie "zawiesza", czyli nie odświerza... To samo miałem w Delphi czasami...

 

A probowales dac odpowiednik pascalowego:

Form1.DoubleBuffered:=True;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ponieważ jest to trochę chamska pentla ( for ) dlatego komponenty reagują tak jak reagują ( zbyt wolno :) ). W zasadzie problem rozwiąże dodanie do tej pentli metody Application->HandleMessage() ; która ogónie ma za zadanie przyznawanie priorytetu i reagowanie na "zamrażanie aplikacji". można ją stosować nie tylko do takich rzeczy ale do wielu innych. Najczęściej w pentlach które sprawiają podobne problemy... :)

 

Czyli poprawny i optymalny kod wygląda tak (jeśli chcesz zobaczyć ten licznik w pracy):

 

for(int i=0; i<this->iloscTestow; i++){      Application->HandleMessage();       NrTestLabel->Caption = IntToStr(numerTestu);      this->numerTestu++;      ProgressBar1->StepIt();}

A takie pytanie czy nie lepiej dwie środkowe linijki załatwić w jednej ?

// NrTestLabel->Caption = numerTestu++;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A takie pytanie czy nie lepiej dwie środkowe linijki załatwić w jednej ?

// NrTestLabel->Caption = numerTestu++;

fakt lepiej .. ale nie nad tym sie akurat w danym momencie zastanawiałem.

Dzięki za rade. Wszystko działa ok :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

z nieba mi spadliście :).. nieraz potrzebowałem pokazywać coś w pętli i kupa z tego wychodziła... ostatnio nawet intro do programu zrobiłem w stylu pojawiającego sie okna... (alpha) i na pętle nie chciało działać... (optymalizacja.. czy leniowść systemu?) więc zrobiłem na tajmerze... 2x wiecej roboty :)

miejmy nadzieje ze to zadziała...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...