Animacja oczekiwania

  • Rejestracja: dni
  • Ostatnio: dni
0

Jak można napisać jakąś prostą animację oczekiwania gdy wątek główny programu jest czymś zajęty?

puchi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 411
0

jak rozpoczynasz jakąś operacje wyświetlaj jakąś formę z napisem PROSZĘ CZEKAĆ...
a po zakońćzeniu po prostu ją zamykasz i tyle, możesz dodać progresbar żeby ci pokazywał postęp

  • Rejestracja: dni
  • Ostatnio: dni
0

np takie coś

Kopiuj
//początek
Label1.Caption:='Trwa obliczanie..';
//obliczanie czy coś tam innego, np takie coś
for i:=0 to 65535 do
begin
// coś się robi
...
// dodawanie kropki do napisu
Label1.Caption:=Label1.Caption+'.';
// ożywianie głównego wątku żeby odśnieżył okienko itd
Application.ProcessMessages();
end;
//koniec
Label1.Capton:='Zakończono obliczanie';

albo to co zawala wątek główny wsadzić do pobocznego i z niego coś na foremce zmieniać ( pamiętać o synchronizacji trzeba )

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3356
0

Zajecie glownego watku jest bledem projektowania. Skoro cos wymaga obliczen czasochlonnych, powinno byc w oddzielnym watku, a prezentacje czekania mozesz zrobic zmieniajac, zgodnie z timerem, klatki animacji czegos w watku glownym.

cimak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1668
0

najlepiej jak masz gdzies petle to zaladowac ikonki/bitmapy do TImgeList i potem w tej petli zmieniac wyswietlane obrazki na kolejne z listy...

@Szczawik: piszesz, ze to blad projektowania, ale wlasciwie dlaczego? co w tym zlego jesli na chwile przyblokujemy glowny watek skoro i tak w czasie pracy nie chcieli bysmy, aby nasz program wykonywal jakies inne operacje?

GA
  • Rejestracja: dni
  • Ostatnio: dni
0

Problem tkwi w tym ze wykonywanie jakichkolwiek operacji na VCL-u z poziomu watku podczas gdy glowny proces jest zajety jest bardzo trudne. Mozna to zrobic chyba jedbynie bez synchronizacji. W przeciwnym razie watek bedzie czekal az proces glowny sie zakonczy. Nawet gdy wstawimy animacje w formie klipu AVI to odtwarzanie bedzie wstrzymane do czasu zakonczenia glownego watku.

  • Rejestracja: dni
  • Ostatnio: dni
0

Chcę stworzyć okienko z animacją, które będzie wyświetlane podczas wykonywania operacji na bazie danych. Operacje te trwają do ok pół minuty i w tym czasie nie jestem w stanie nic wyświetlić.
Może ktoś ma pomysł jak to rozwiązać?

cimak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1668
0

no to chyba faktycznie najlepiej w osobnym watku to robic. a w glownym wyswietlac informacje ze zajety.

EgonOlsen
  • Rejestracja: dni
  • Ostatnio: dni
0
gamestone napisał(a)

Problem tkwi w tym ze wykonywanie jakichkolwiek operacji na VCL-u z poziomu watku podczas gdy glowny proces jest zajety jest bardzo trudne.

Po to wlasnie TThread ma metode Synchronize.

b0bik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1114
0

Obawiam się że Synchronize na niewiele sie zda, gdyż ono powoduje wywołanie kodu w kontekście wątku głównego - jeśli więc ten ma przywieche na 30s z tytułu operacji na bazie nic z tego ciekawego nie wyjdzie. Latające ptaszki można zrobić, pod warunkiem że zapytanie będzie odpalał wątek poboczny, lub opcjonalnie używasz np ADO wówczas można skorzystać z trybu asynchronicznego pobierania danych.

Pozdro

  • Rejestracja: dni
  • Ostatnio: dni
0

muehe =D ale to w trzecim poście to animacja z wątku głównego =D
a problemu to przecież nie ma tak naprawdę ( pomijając systemy wsadowe i inne starocie/specjalistyczne mutanty ), wystarczy robić w wątkach =]

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3356
0

@cimak - problemem nie jest fakt, ze jest to watek glowny; problemem jest fakt blokowania kolejki komunikatow, do ktorej trafiaja komunikaty systemowe; nie masz wtedy mozliwosci na przyklad przerwania dlugotrwalych operacji, gdy uzytkownik bedzie chcial zamknac system - program wtedy po prostu wisi. To jest blad projektowania.

cimak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1668
0

no dobrze ale jesli instrukcje sa wykonywane np w petli i co jakis czas damy application.ProcessMessages; to bedzie ok, tak?

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3356
0

Nie, poniewaz Application.ProcessMessages nie przetwarza niektorych komunikatow (w tym, jak dobrze pamietam, rowniez WM_QUIT).

b0bik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1114
0
cimak napisał(a)

no dobrze ale jesli instrukcje sa wykonywane np w petli i co jakis czas damy application.ProcessMessages; to bedzie ok, tak?

Jeden z pytaczy napisał że operacja na bazie trwa pół minuty, więc tego ProcessMessages i tak byś nigdzie nie wsadził.

  • Rejestracja: dni
  • Ostatnio: dni
0

no to ubić problem pakując to do innego wątku i tyle =D

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.