Jak po upływie 30 sek. zamknąć program

Potrzebne komponenty


TTimer: Zakładka: System, nazwa: Timer1
TLabel: Zakładka: Standard, nazwa Label1

Deklarujemy zmienną globalną:
Var
  Form1: TForm1; //Ta zmienna już jest...
  I : Integer = 30; //Zapamiętaj: Nie można dodać takiego zapisu do funkcji, ponieważ dostaniesz komunikat "Cannot initialize local variables" co oznacza "Nie można zainicjować zmiennych lokalnych".
 

I = czas który pozostał do końca

Ustawiamy Interval naszego Timer1 na 1000 (30 000 milisekund / 1000 = 30 sekund; 1 sekunda = 1000 milisekund).

Kod programu


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := 'Do zakończenia programu pozostało: ' + IntToStr(I); // wyświetlamy postęp
  Dec(I); //Komenda Dec jest szybsza od "i := i - 1"
  if I <= 0 then Application.Terminate; // zamykamy program gdy zmienna "I" będzie równa lub mniejsza od 0
end;


Zobacz także:
Informacje
Ostatnia modyfikacja 27-01-2010 10:40 Ostatni autor Demonical Monk
Ilość wyświetleń 8955 Wersja 10
Komentarz
Lardux dnia 05-11-2009 12:29
No to jeszcze ja dodam swoje 3 grosze, w chwili gdy zacznie się odliczanie i zostanie np 25 sekund, złap za okno programu (belkę) w celu przesunięcia okna z jednego miejsca na pulpicie, na inne, przesuń to okno, ale nie puszczaj lewego przycisku myszy, trzymaj je minute, program będzie działał jeszcze 25 sekund od puszczenia lewego przycisku myszy, co jest oczywiście błędem... popracuj nad tym ;p
Patryk27 dnia 28-10-2009 19:48
@Piga
Lepiej poczytaj o Dec...
Dec jest szybsze od "standardowego" zapisu; i := i - 1;
Wywołaj sobie 10 000 000 razy Dec oraz tyle samo razy i := i - 1;
Zobaczysz różnicę :-)
Piga dnia 30-03-2009 01:08
vecco --> że co ???? dec jest szybsze ? hahahah xD ... Dec(i) a i:=i-1 to jest zupełnie to samo bo to ta sama funkcja tylko inaczej zapisana.

like_prog --> a jak myślisz dlaczego kolega, który stworzył ten artykuł wstawił taką linijke kodu:
Label1.Caption := 'Do zakończenia programu pozostało: ' + IntToStr(I); ??????? no chyba bo to żeby było widać odliczanie czasu do zakończenia programu więc twój komentarz był niby dobry ale w tym przykładzie akurat zbędny.
vecco dnia 15-03-2009 10:12

Dec(I); // komenda Dec jest równoznaczna I:= I - 1;

wydaje mi się, że to nie to samo... dec jest szybsze.
like_prog dnia 27-01-2009 10:15
zal
Poprostu ustawiamy interwał czasowy na 30 s ( 30000 ) i w zdarzeniu timera ustawiamy close;
Mnich TT dnia 12-09-2008 15:21
"sochalewski, TTimer wykonuje się już podczas pierwszych chwil programu, więc program od razy się zamknie"

"ja uzylbym prostszego sposobu:
ustawil interval na 30000 i w OnTimer wpisal Close xD"

kompromis ?

w timerze
var
 x:boolean;
begin
 if x then close;
 x:=true;
end;

program zamknie się po 30 sekundach ale nie będzie wiadomo kiedy dane 30 sekund minie, tak samo da sie ze sleepami zrobić robiąc pętle z sleepami po 1000 ms i application.processmessages przed sleepami żeby zapobiegało "zamarzaniu" programu :)
Autre dnia 07-09-2008 18:41
sochalewski, TTimer wykonuje się już podczas pierwszych chwil programu, więc program od razy się zamknie
sochalewski dnia 20-02-2007 14:38
ja uzylbym prostszego sposobu:
ustawil interval na 30000 i w OnTimer wpisal Close xD
kult dnia 21-05-2003 21:40
Johny pewnie że nie lepiej, spróbuj w czasie wykonywania tego polecenia nacisnąć np. jakiś przycisk ;) no i nie dowiesz się ile zostało czasu do zakończenia aplikacji :)
Johny dnia 09-03-2003 14:40
A nie lepiej :
sleep(30000);
close;
???

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0592 sek. (zapytań SQL: 9)