Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Delphi odliczanie (timer)

#1
Delphi odliczanie (timer)
Witam, napisałem pewien program któremu użytkownik podaje ilość sekund a po ich upływie program się zamyka. Problem w tym że program nic nie odlicza i się nie zamyka.
Kod:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Timer1: TTimer;
    Label2: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
b:integer;
begin
b:=strtoint(edit1.Text);
label1.Caption:=inttostr(b);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
a:integer;
begin
a:=strtoint(label1.caption);
label2.caption:='Zakonczenie programu za: ' + inttostr(a);
dec(a);
if a <= 0 then Application.Terminate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

end.
Chodzi o to, że w pole edit1 wpisuje się ilość sekund, następnie klika w button1 i dane zostają wysłane do label1. Potem jest procedura timer-a i coś tu właśnie nie działa. Po kliknięciu w button2 timer powinien zacząć działać(enabled=false ustawiłem). W label2 wyświetla się "Zakończenie programu za: {podany czas np. 50}" Tu powinno być odliczanie ale nic się nie odlicza.
 System operacyjny: windows_seven Przeglądarka: firefox
#2
RE: Delphi odliczanie (timer)
Witam, po kliknięciu przycisku trzeba ponownie aktywować Timer (ustawić Enabled na true), a zamiast Application.Terminate chyba lepiej wywołać funkcję exit.
 System operacyjny: windows_seven Przeglądarka: firefox
#3
RE: Delphi odliczanie (timer)
Nie bardzo rozumie. Jest już tam taka opcja:
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

Program działa tak, że po wpisaniu np.10 w pole edit i kliknięciu button1 liczba 10 pojawia się w labelu1. Następnie klika button2 i w labelu2 pojawia się "Zakończenie programu za 10"
I tak to stoi, powinno odliczać 9..8.. itp ale nic się nie dzieje.
 System operacyjny: windows_seven Przeglądarka: firefox
#4
RE: Delphi odliczanie (timer)
Nie zauważyłem. Problem polega na tym, że zmniejszasz wartość zmiennej a już po zapisaniu jej w etykiecie. Jak przesuniesz instrukcję dec(a) linijkę wyżej, to powinno zadziałać.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#5
RE: Delphi odliczanie (timer)
Zrobiłem tak i coś tam pomogło. Po wpisaniu np.10 Działa ale odejmuje tylko 1. Czyli wychodzi Zakończenie programu za 9. No i dalej stoi.
 System operacyjny: windows_seven Przeglądarka: firefox
#6
RE: Delphi odliczanie (timer)
1. Obiekt TTimer powinien być ustawiony na początek czyli:
TTimer.Enabled:=false;

2. Obiekt TTimer ma właściwość Interval. W Twoim przypadku powinno być 1000
(bo skalą są milisekundy 1000 ms = 1s)

3. Co najważniejsze procedura TForm1.Timer1Timer jest wywoływana co Interval
i się kończy a zmienna "a" jest lokalna więc po ponownym wywołaniu procedury tworzy się jej NOWA instancja. Czas, który upłynął od ostatniego wywołania należy przechowywać w zmiennej globalnej. Lub inaczej we właściwości Tag obiektu TTImer
Kod:
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Tag:=StrToInt(label1.Caption);
timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Tag:=Timer1.Tag-1;
  label2.caption:='Zakonczenie programu za: ' + inttostr(Timer1.Tag);
  if Timer1.Tag<=0 then Application.Terminate;
end;
Piszę poprawnie po polsku
 System operacyjny: windows_seven Przeglądarka: firefox
#7
RE: Delphi odliczanie (timer)
igorkoch
Twój sposób działa tylko chciałbym by w labelu2 wyświetlało mi czas do zamknięcia programu.

Procedure TForm1.Timer1Timer(Sender: Object);
begin
timer.Tag:=timer1.Tag-1;
Label2.caption:='Zakonczenie programu za: ' + (co tu wpisac by odliczało mi tu czas)
if timer.tag <=0 then application.terminate;
end;

label2.caption:='Zakonczenie programu za: ' + inttostr(Timer1.Tag);
Już tak robiłem wcześniej. Pojawia się error. Could not find program {ścieżka}

Ok, już nie ważne. Antywirus blokował. Wszystko już działa. Dziękuje! Temat rozwiązany.
 System operacyjny: windows_seven Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Delphi odliczanie (timer))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [Pascal/Delphi] Sortowanie quicksort oraz scalanie. Chudy2000 3 8897 01.05.2016, 22:34
Ostatni post: Szachista
  Odliczanie do 1000 dcd96 6 3492 25.04.2014, 23:05
Ostatni post: dcd96
  [Delphi] 4 krótkie zadania z całkowitych podstaw - prośba o pomoc. thinkpad 2 2671 07.01.2014, 16:43
Ostatni post: Szachista

Skocz do:


Wybrane wątki (Delphi odliczanie (timer))
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Środowisko do assemblera Physicist 4 10979 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 11394 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 10982 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 10617 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 9687 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 13515 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 10216 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 10640 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 12118 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 10928 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 11747 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 10946 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 11662 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 14503 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 12161 07.11.2018 13:41
Ostatni post: Ajgor