CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Pytanie o "Trochę inny ProgressBar"

Pytanie o "Trochę inny ProgressBar"

dział ogólny

Pytanie o "Trochę inny ProgressBar"

Nowy postprzez Pitek » środa, 11 maja 2011, 22:22

Witam!
Mam pytanie jak zrobić żeby ten "Trochę inny PrograssBar" z porady działał tak długo jak wykonywany jest kod w zdarzeniu ?
Czyli na początku zdarzenia, ProgressBar startuje a jak kod się wykona to dopiero wtedy się zatrzymuje, jak to zrobić ?
Pytanie może śmiesznie proste ale jakoś nie umiem go poprawnie rozgryźć :? i proszę o pomoc.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Pytanie o "Trochę inny ProgressBar"

Nowy postprzez Cyfrowy Baron » czwartek, 12 maja 2011, 17:50

► patrz serwis: Cyfrowy Baron dział: porady -> różne -> Trochę inny ProgressBar.

Czyli na początku zdarzenia, ProgressBar startuje a jak kod się wykona to dopiero wtedy się zatrzymuje, jak to zrobić ?


Przecież w poradzie tak działa. Jak długo kod blokuje program, tak długo ProgressBar działa:

KOD cpp:     UKRYJ  
 long style = GetWindowLong(ProgressBar1->Handle, GWL_STYLE);
 style = style | PBS_MARQUEE;
 SetWindowLong(ProgressBar1->Handle, GWL_STYLE, style);

 // Rozpoczęcie odliczania
 ProgressBar1->Perform(PBM_SETMARQUEE, true, 100);

 for(int i = 0; i < 100; i++) /* kod, który się wykonuje */
 {
  ProgressBar1->Position += 1;
  Sleep(100);
  Application->ProcessMessages();
 }
 // Zakończenie odliczania
 ProgressBar1->Perform(PBM_SETMARQUEE, false, 100);


Jak widzisz funkcja ProgressBar1->Perform(PBM_SETMARQUEE, true, 100); uruchamia ProgressBar, a funkcja ProgressBar1->Perform(PBM_SETMARQUEE, false, 100); go zatrzymuje. Musisz sterować tym ręcznie, czyli tak zbudować kod, że po jego wykonaniu zostanie wywołana funkcja zatrzymująca działanie ProgressBar.

Bardziej szczegółowej odpowiedzi nie da się udzielić na Twoje pytanie, gdyż sam podałeś niewiele szczegółów.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pytanie o "Trochę inny ProgressBar"

Nowy postprzez Pitek » czwartek, 12 maja 2011, 23:18

Mimo wszystko czas działania tego ProgressBar'a zależy od liczby w warunku pętli (im większa tym dłużej). Odnoszę wrażenie że mimo Application->ProcessMessages(); aplikacja czeka aż skończy przelatywać ProgressBar a potem kursor robi się na busy i wykonuje kod, ja to mam tak :
KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 long style = GetWindowLong(ProgressBar1->Handle, GWL_STYLE);
 style = style | PBS_MARQUEE;
 SetWindowLong(ProgressBar1->Handle, GWL_STYLE, style);

 // Rozpoczęcie odliczania
 ProgressBar1->Perform(PBM_SETMARQUEE, true, 100);

 for(int i = 0; i < 100; i++)
 {
  ProgressBar1->Position += 1;
  Sleep(100);
  Application->ProcessMessages();
 }

/*
kod
---
---
---
---
 */



 // Zakończenie odliczania
 ProgressBar1->Perform(PBM_SETMARQUEE, false, 100);
}
 

Chodziło by mi o to aby ProgressBar chodził w jakby w nieskończoność a jego zatrzymanie wymuszałby koniec wykonywania kodu. W tej chwili tak się nie dzieje. Mimo polecenia zatrzymującego pod koniec mojego kodu aplikacja czeka aż zostanie spełniony warunek w pętli potem chwile "pracuje" i dopiero jest efekt. Jeżeli nie dam polecenia kończącego działanie ProgressBar to on i tak się zatrzyma pod koniec warunku z pętli, więc tak jakby funkcja zatrzymująca nie działała, albo źle jej używam.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Pytanie o "Trochę inny ProgressBar"

Nowy postprzez Cyfrowy Baron » piątek, 13 maja 2011, 16:19

Nie masz racji. Umieść na formularzu ProgressBar i uruchom go, ale nie dodawaj funkcja zatrzymującej. Potem po chwili kliknij na jakiś button i uruchom jakieś zadanie. Program powinien wykonywać zadanie. Jeżeli jednak użyjesz funkcji Sleep to cała aplikacja wraz z ProgressBar będzie się zatrzymywała, gdyż ta funkcja wstrzymuje aplikację.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 7 gości

cron