Entwickler-Ecke
Sonstiges (Delphi) - Countdown
Makavelithadon - Mi 27.09.06 14:22
Titel: Countdown
Ne Frage ma wieder:
Ich will folgendes haben:
Einen Countdown, der per buttonklick aktiviert wird und den mann in einem labelfeld runterzählen sieht und eine message, die erscheint wenn der zähler auf null ist!
Irgendwelche vorschläge? :)
Miri - Mi 27.09.06 14:28
guck mal nach
TIMER...
ZeitGeist87 - Mi 27.09.06 14:39
Hallo!
Globale Variable deklarieren, der nen Startwert zuweisen und in der OnTimer-Procedure diese Variable dekrementieren und prüfen ob sie 0 ist
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var counter: integer = 10; ...
... dec(counter); if counter <= 0 then begin Timer deaktivieren; Meldung ausgeben end; |
Noch zu beachten: Zur Designzeit den Timer auf Enabled = false setzen, und das Intervall auf 1000 (Damit immer nach ca. 1 Sekunde das OnTimer-Ereignis ausgelöst wird).
LG
Stefan
Makavelithadon - Mi 27.09.06 18:52
Ich schigg ma quelltext
Delphi-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:
| var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin If Zeit =0 then Label1.caption := 'Boom' else Label1.Caption :='noch' +IntToStr(Zeit)+ 'Sekunden'; Timer1.Enabled := (zeit >=0); Dec(Zeit); end;
procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := False; Button1.Caption := 'Start'; Zeit:= 10; end; end. |
Folgendes Prob: Wenn ich jez den button klick kommt da die message sofort im labelfeld und dann steht da 1-sekunde und das wars schon!!
Moderiert von
raziel: Delphi-Tags hinzugefügt
ZeitGeist87 - Do 05.10.06 11:10
Hi!
Delphi-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:
| procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin If Zeit =0 then Label1.caption := 'Boom' else begin Label1.Caption :='noch' +IntToStr(Zeit)+ 'Sekunden'; Timer1.Enabled := (zeit >=0); Dec(Zeit); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := False; Button1.Caption := 'Start'; Zeit:= 10; end; end. |
LG
Stefan
Makavelithadon - Mi 11.10.06 14:13
Jetzt steht im Labelfeld wenn man den klickt nur die anchricht und dann nix mehr
ZeitGeist87 - Mi 11.10.06 14:18
welchen intervall hat dein timer?
was für ne nachricht?
wir der button auch erst bei onbuttonclick oder so aktiviert oder läuft der schon bei on formcreate munter drauf los?
Xion - Mi 11.10.06 14:20
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Timer1Timer(Sender: TObject); begin If Zeit =0 then Label1.caption := 'Boom' else Label1.Caption :='noch' +IntToStr(Zeit)+ 'Sekunden';
Timer1.Enabled := (zeit >0); Dec(Zeit); end; |
so vielleicht?
Makavelithadon - Mi 11.10.06 14:24
Intervall is 1000 und es eght auch so net bei buttonklick kommt immer nur die nachricht
Nachricht= die die er zeigen soll wenn timer auf 0 is die is bei mir 'boom'
Xion - Mi 11.10.06 14:27
Makavelithadon hat folgendes geschrieben: |
bei buttonklick kommt immer nur die nachricht |
was verstehst du unter Nachricht? noch x Sekunden? Boom? oder ne Fehlermeldung? (oder die Tagesschau :mrgreen: )
Makavelithadon - Mi 11.10.06 14:29
Also bei buttonklick soll ersma im label kommen noch 10 sekunden dann soll der sekündlich runterlaufgen und wenn der halt auf null is soll im label stehen booom
Xion - Mi 11.10.06 14:30
setzt du Zeit auch auf irgendwas beim Programmstart?
Makavelithadon - Mi 11.10.06 14:31
So hier nommal quelltext
implementation
var counter :integer=10 ;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Zeit =0 then
Label1.caption := 'Boom'
else
Label1.Caption :='noch' +IntToStr(Zeit)+ 'Sekunden';
Timer1.Enabled := (zeit >0);
Dec(Zeit);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled := False;
Button1.Caption := 'Start';
Zeit:= 10;
end;
end.
Delete - Mi 11.10.06 14:32
Villeicht gehts mit zwei Timern:
Timer1.enabeld:=false;
OnClick des Buttons: Timer1.enabled:=true
Variablen:= Zahl:Integer;
OnTimer1-Ereigniss:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| If Zahl:=0 then begin Label1.caption:='Zeit abgelaufen'; Timer2.enabled:=false; end else Zahl:=Zahl-1 |
OnTimer2-Ereignis:
ZeitGeist87 - Mi 11.10.06 14:32
:lol:
nenn mal oben deinen counter zeit =)
LG
Stefan
Xion - Mi 11.10.06 14:32
ich seh in deinem Code oben gar keine Deklaration von Zeit. Hast du irgendwo Zeit: integer? UND: nicht lokal, sondern global muss Zeit sein.
//EDIT: lol haben da viele zwischendrin geantwortet *g* da kriegt man ja nur die hälfte mit ;)
ZeitGeist87 - Mi 11.10.06 14:37
siehe anhang..hat 3 minuten gedauert!
Makavelithadon - Mi 11.10.06 14:37
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Label1.caption :=Zahl
[Fehler] Countdown.pas(63): Inkompatible Typen: 'String' und 'Integer'
Delete - Mi 11.10.06 14:39
Zahl ist doch die Zahl wovon runtergezählt werden soll, also z.B 10.
Das Intervall vom ersten Timer müsste eine Sekunde betragen. Und das Intervall vom zweiten müsste möglichst kurz sein.
ZeitGeist87 - Mi 11.10.06 14:39
.caption erwartet nen
String
Zahl ist aber vom Typ
integer
Also einfach
Delphi-Quelltext
1:
| label1.caption:= inttostr(zahl); |
LG
Stefan
Xion - Mi 11.10.06 14:41
2 timer ist meinermeinung nach quatsch. Wenn du die eine Zeile vom 2ten Timer in den ersten ans Ende kopierst ist das genau das selbe.
Makavelithadon - Mi 11.10.06 14:44
Kann mir jez plz nochmal einer nen quelltext schiggn ich bin grad verwirrt^^
ZeitGeist87 - Mi 11.10.06 14:45
schau mal auf seite eins da hab ich dir was angehängt...
Delphi-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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end;
var Form1: TForm1; zeit: integer = 10;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin zeit:= 10; label1.caption:= inttostr(zeit); timer1.enabled:= true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin dec(zeit); if zeit < 1 then begin label2.Caption:= 'BOOM'; timer1.Enabled:= false; end else label2.caption:= inttostr(zeit); end;
end. |
AndyM79 - Mi 18.10.06 08:23
Hallo,
das Thema läuft zwar schon ne Weile, aber ich hatte ein ähnliches Problem und hab mir da einfach mal ein eigenes Formular gebastelt.
Formular in Projekt einbinden und einfach Aufrufen. Es geht dann ein Fenster auf und der Countdown läuft ab, solng ist die Applikation gesperrt.
Ich fand die Lösung recht elegant.
Dateien des Countdown Formulars und Bild des Fensters im Anhang.
und so wird der Countdown gestartet:
**Code**
procedure TForm1.Button1Click(Sender: TObject);
begin
with TCountdown.Create(nil) do
try
StartCountdown(1);//Zeit Countdown in Minunten, läßt sich aber auch in Sekunden umbauen
finally
Free;
end;
end;
****
Vielleicht kann es ja jemand gebrauchen.
Gruß aus dem schönen Westerwald
Andy
Raezor - Mo 12.03.07 18:43
wie kann ich machen, das neben den start button ein feld ist, zum eintragen, ab wo der timer zählt?
Also so, dass man die Zeit, die runterzählt selbst einstellen kann?
ich bezihe mich auf den code:
http://www.delphi-forum.de/download.php?id=4514
Raezor - Di 13.03.07 21:37
seit nicht so, teilt euer wissen mit mir^^
Marc. - Di 13.03.07 21:44
Das sollte nun wirklich nicht zu schwer sein.
Was du brauchst ist ein Editfeld. Aus diesem Editfeld liest du deinen Startwert aus und ersetzt ihn mit der "10", die zur Zeit noch in deinem Quellcode steht.;)
grüße
Raezor - Mi 14.03.07 15:07
und das geht, indem man welchen code benutzt?
ZeitGeist87 - Mi 14.03.07 15:21
Hallo!
Angenommen du hast ein Edit, einen Button und einen Timer auf deinem Formular!
Deklarier eine globale Variable:
counter: integer;
Einstellungen: Edit = deine Zahl
Timer = Intervall auf 1000 (1 Sekunde)
Timer ist deaktiviert (enabled = false)
Bei Button-Klick:
Delphi-Quelltext
1: 2: 3: 4:
| counter:= 0; Timer.Enabled:= true; |
Im Timer-Ereignis deines Timers:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| inc(counter); caption:= inttostr(edit.text - counter); if counter >= strtoint(edit.text) then begin end; |
Hoffe es ist verständlich!
LG
Stefan
Raezor - Mi 14.03.07 16:09
Irgendwie nicht.^^
mein quellentext:
Delphi-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: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; Button2: TButton; Button3: TButton; Timer2: TTimer; Panel1: TPanel; Label2: TLabel; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer3Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public end;
var Form1: TForm1; zeit: integer = 100;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin zeit:= 11; timer1.enabled:= true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin dec(zeit); windows.Beep(1000,200); if zeit < 0 then begin label2.Caption:= '00'; windows.Beep(800,200); windows.Beep(400,2000);
close; end else label2.caption:= inttostr(zeit); end;
procedure TForm1.Timer2Timer(Sender: TObject); begin zeit:= 60; windows.Beep(2000,2000); timer1.enabled:= false; timer2.enabled:= false; end;
procedure TForm1.FormCreate(Sender: TObject); begin
Form1.Brush.Style:=bsClear; Form1.BorderStyle:=bsNone; end;
procedure TForm1.Timer3Timer(Sender: TObject); begin inc(zeit); end;
procedure TForm1.Button2Click(Sender: TObject); begin zeit:= 31; timer1.enabled:= true; end;
procedure TForm1.Button3Click(Sender: TObject); begin zeit:= 8; timer1.enabled:= true;
end;
end. |
Wie also?
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Raezor - Do 15.03.07 20:24
bitte helft mir doch.
Ich komme nicht ganz zurecht.
Versuche schon mit
, doch es geht nicht
ZeitGeist87 - Do 15.03.07 20:51
Hallo!
1. Wenn Zeit vom Typ Integer ist (was ich annehme) musst du zeit:= strtoint(edit1.text) schreiben, weil Integer und String nicht kompatibel sind.
2. Wenn man sich die vorherigen Beiträge durchliest und die Suchfunktion im Forum benutzt, kommt man irgendwann auch dahinter.
3. Im Anhang!
LG
Stefan
Raezor - Do 15.03.07 22:04
Vielen dank, Geist der Zeit, es funktioniert
mit strtoint
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!