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".
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;
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:



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ę
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.
Dec(I); // komenda Dec jest równoznaczna I:= I - 1;
wydaje mi się, że to nie to samo... dec jest szybsze.
Poprostu ustawiamy interwał czasowy na 30 s ( 30000 ) i w zdarzeniu timera ustawiamy close;
"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
ustawil interval na 30000 i w OnTimer wpisal Close xD
sleep(30000);
close;
???