Entwickler-Ecke

Sonstiges (Delphi) - Wo ist mein Fehler ????


patrick dee - Mi 05.02.03 18:35
Titel: Wo ist mein Fehler ????
hi,

brauche einen countdown.
Label1 zeigt den inhalt der Label2 an. drücke ich start so soll runter auf 0
gezählt werden.
es geht dabei um minuten und sekunden 55:55
mein code :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.CountTimerTimer(Sender: TObject);
begin
dec(Tackt);
  Label1.Caption :=intToStr(Tackt);
  if Tackt <=0 then

  begin
    CountTimer.Enabled := false;
     Label1.Caption := '00:00';
  end;
end;


wenn ich so starte passsiert nix und label1 zeigt gleich 00:00 an.
wo ist mein fehler :cry:

patrick


UGrohne - Mi 05.02.03 18:59
Titel: Re: Wo ist mein Fehler ????
patrick dee hat folgendes geschrieben:
hi,

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.CountTimerTimer(Sender: TObject);
begin
dec(Tackt);
  Label1.Caption :=intToStr(Tackt);
  if Tackt <=0 then

  begin
    CountTimer.Enabled := false;
     Label1.Caption := '00:00';
  end;
end;


Erstmal sollte man das etwas ordentlicher schreiben, da blickt keiner durch, 2. solltest Du einen ordentlichen Titel schreiben, nix mit "Wo ist mein Fehler?" !!!
Was ist denn überhaupt tackt? wo wird diese Variable initialisiert, denn so wie's ausschaut, ist die gleich am Anfang 0 und dann ist klar, dass der if-then-Teil ausgeführt wird, also 00.00 angezeigt wird. Der Fehler ist also nicht in dieser Prozedur, denke ich.... poste mal die Start-Proz für den Timer.

Gruß


Tino - Mi 05.02.03 19:07

@Patrick: Hier ein Auszug aus den Richtlinien:
Richtlinien hat folgendes geschrieben:
1.1 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.

Bitte ändere den Titel Deines ersten Beitrags (einfach auf Edit klicken)! Danke!

Gruß
TINO


BungeeBug - Mi 05.02.03 19:12

Hi ... also auch wenn es schon ne Lösung (oder nen Ansatz gibt) ... ich will / wollte auch wieder mal was Proggen ... hier is also meine Lösung .. nicht Meckern wenns nicht DIE Lösung is ... war eben nicht allzuviel Zeit da ... so jetzt aber


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
     minuten , sekunden : integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 IF Timer1.Enabled = false THEN
  BEGIN
   minuten := 0;  // <- Zeit in Minuten (Zahl vor dem : )
   sekunden := 10;  // <- Zeit in Sekunden (Zahl nach dem :)
   Timer1.Enabled := true;
  END
 ELSE
  BEGIN
   Timer1.Enabled := false;
  END;
end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin
 sekunden := sekunden -1 ; // Eine Sek. weniger ...
 // Check ob die Sekunden noch über 0 sind
 IF sekunden = 0 THEN
  BEGIN
   minuten := minuten -1;
   sekunden := 59 ;
  END;
 // Zeitformat anpassen
  IF Length(IntToStr(sekunden)) = 1 THEN
   BEGIN
     //Label updaten -> Zeit hat nur eine Stelle
     Label1.Caption := 'Zeit: 0'+ IntToStr(minuten) +':0'+ IntToStr(sekunden);
   END
  ELSE
   BEGIN
    //Label updaten -> Zeit hat mehr eine Stelle
     Label1.Caption := 'Zeit: '+ IntToStr(minuten) +':'+ IntToStr(sekunden);
   END;
end;

end.

Sollte mit nem Label , nem Timer und nem Button funzen ...

MfG BungeeBug