progressbar w pętli - zawieszony

2011-09-20 23:34

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

Witam.
Piszę dosyć obszerny program do obliczeń pewnego technicznego zagadnienia. Chciałem dodać progressbar i zrezygnowac z wyświetlania w memo liczb od 1 do 400. Niestety progressbar "odświeża" się dopiero po wyjściu z petli. Tak właściwie to cały program jest "martwy", nawet okienka programu nie można przesunąć. Czy trzeba gdzieś włączyć odświeżanie obrazu? Memo cały czas wyświetla nowe informacje. Nie wiem co jest źle? Oto fragment kodu:

  for z:=1 to 400 do
   begin
   poprzeczny_moment_bezwladnosci[z]:=0;
   liczba_pelnych_prostopadloscianow_w_warstwie[z]:=0;
   srodek_powierzchni_y[z]:=0;
   srodek_powierzchni_x[z]:=0;
   for x:=1 to 400 do
      for y:=1 to 400 do
         begin
prostopadloscian:=przestrzen[x,y,z];
 liczba_przecietych_bokow:=0;   
.....
....
.....

srodek_powierzchni_y[z]:= srodek_powierzchni_y[z]/liczba_pelnych_prostopadloscianow_w_warstwie[z];
    srodek_powierzchni_x[z]:= srodek_powierzchni_x[z]/liczba_pelnych_prostopadloscianow_w_warstwie[z];

    poprzeczny_moment_bezwladnosci[z]:=poprzeczny_moment_bezwladnosci[z]-(liczba_pelnych_prostopadloscianow_w_warstwie[z]*((maxx-minx)/400)*((maxy-miny)/400))*srodek_powierzchni_y[z]*srodek_powierzchni_y[z];
    memo1.lines.Append('z= '+ FloatToStrF(z, ffFixed, 7, 2));
    progressbar1.Position:=(z div 400)*100;
   end;                                       
edytowany 1x, ostatnio: leo1leo, 2011-09-20 23:34
Ale twój post mi się zepsuł, wychodzi po za ekran jpd wtf?! - xeo545x39 2011-09-28 19:22

Pozostało 580 znaków

JaNek
2011-09-20 23:46
JaNek
0

Zasadniczo problem z wyświetlaniem powinno załatwić

Application.ProcessMessages

dodanie tej linijki kodu za zmianą wartości ProgressBara.
Program jednak będzie "lagował" dlatego polecam osobny wątek do tych obliczeń.

Albo wykonanie operacji w wątkach. - olesio 2011-09-21 00:20

Pozostało 580 znaków

2011-09-21 10:47

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

W takim razie jak tworzy się takie osobne wątki? Bo rozumiem, że chodzi o to aby obliczenia były wykonywane pomimo, iż z programem będziemy robić co innego, tak?

Dzięki wątkowi okno aplikacji bęzie odbierało inne komunikaty, a wątek będzie się wykonywał. Informacje o wątkach znajdziesz na: Wątki poza tym jest mnóstwo innych stron do znalezienia w google. - olesio 2011-09-21 20:53

Pozostało 580 znaków

2011-09-21 12:02

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

Wątek główny obsługuje GUI, wątki poboczne zajmują się wszelkimi działaniami. Wtedy GUI się nie wiesza i jest na bieżąco odświeżane.

Pozostało 580 znaków

leo1leo
2011-09-23 20:25
leo1leo
0

Niestety dodanie

Application.ProcessMessages ; 

nic nie zmienia

Pozostało 580 znaków

2011-09-24 22:24

Rejestracja: 16 lat temu

Ostatnio: 11 godzin temu

0

a gdzie dodajesz? spróbuj tak:

  for z:=1 to 400 do
   begin
   ...
   for x:=1 to 400 do
   begin
      Application.ProcessMessages;
      for y:=1 to 400 do
      ...

Pozostało 580 znaków

leo1leo
2011-09-25 23:56
leo1leo
0

Dodawałem zaraz za zmianą wartości dla progressbara.
Niestety druga propozycja też nie działa. Progressbar "rośnie" dopiero kiedy program wykona tą pętlę. Jest to zasadnicza pętla dla działania programu i trochę trwa jej wykonanie. Dlatego chciałem mieć jakiś wskaźnik postępu prac obliczeniowych.

Pozostało 580 znaków

2011-09-26 00:15
Moderator

Rejestracja: 11 lat temu

Ostatnio: 2 miesiące temu

Lokalizacja: Szczecin

0

To dlaczego uparcie nie chcesz skorzystać z wątków? A uprzedzając pewnie kolejne pytanie o link: Wątki ;/


Pozostało 580 znaków

2011-09-27 13:04

Rejestracja: 16 lat temu

Ostatnio: 13 godzin temu

0

Ja używam TGauge i właściwości Progress. Działa zawsze.

Pozostało 580 znaków

2011-09-28 18:53
Moderator

Rejestracja: 11 lat temu

Ostatnio: 2 miesiące temu

Lokalizacja: Szczecin

0

Juhas: ale po co powtarzasz swoje posty. Jeśli padnie Tobie połaczenie czy jakiś będzie błąd przy wysyłaniu to sprawdź zawsze czy przypadkiem Twoja odpowiedź nie zdążyła się dodać w danym wątku.


Pozostało 580 znaków

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