mathias79 Opublikowano 7 Stycznia 2005 Zgłoś Opublikowano 7 Stycznia 2005 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 ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Sid Opublikowano 8 Stycznia 2005 Zgłoś Opublikowano 8 Stycznia 2005 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; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 8 Stycznia 2005 Zgłoś Opublikowano 8 Stycznia 2005 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++; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mathias79 Opublikowano 10 Stycznia 2005 Zgłoś Opublikowano 10 Stycznia 2005 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
piotrek_zet Opublikowano 16 Stycznia 2005 Zgłoś Opublikowano 16 Stycznia 2005 tak na prawde jedyne dobre rozwiazanie takiego problemu, to prowadzenie obliczeń w osobnym wątku :( Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 17 Stycznia 2005 Zgłoś Opublikowano 17 Stycznia 2005 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... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...