![]() |
Counter mit Timer und Label
Hiho
wie kann ich ein Label beispielsweiße von 10 ... 0 zählen lassen ?!? Dies ist ja eigentlich kein Probelem. Doch mein Code ist dazu recht lange! Ich weiss aber, dass man dieses simple Problem auch mit nur 2-3 Zeilen Code lösen kann. Könnt ihr mir diesen Code mal posten ?!? danke Trouble_Maker |
Hallo,
Delphi-Quellcode:
Das müsstest Du ncoh mit einem Timer noch Verbinden sonst sieht man da nciht viel. Oder vor/nach der Label-Zeile noch ein Sleep/Delay mit reinnehmen.
for i := 10 downto 0 do
begin Label1.Caption := IntToStr(i); end; Grüsse, Daniel :hi: |
Wie soll man das mit einen Timer in Verbindung bringen? Wenn du den Code in einem OnTimer Ereignis aufrufst, zählt er jedes mal auf null runter.
Wenn schon dann so:
Delphi-Quellcode:
type
TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } FCounter: Integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin if FCounter = 0 then Timer1.Enabled := FALSE; Label1.Caption := IntToStr(FCounter); Dec(FCounter); end; procedure TForm1.FormCreate(Sender: TObject); begin FCounter := 10; end; |
Zitat:
Grüsse, Daniel :hi: |
hiho
@Daniel: ja sowas ähnliches habe ich gesucht, aber irgendwie klappt das nich so, wie ich mir das vorgestellt habe. (Habe erstmal noch i als Integer deklariert, weil es sonst erst garnicht geklappt hätt) Aber er Springt direkt von der 10 auf die 0 !!! Also zählt nicht runter (10,9,8, ... 0 ) wieso ?!? danke Trouble_Maker |
Zitat:
Grüsse, Daniel :hi: |
Weil die Schleife so schnell ist, dass du nichts siehst - ganz einfach.
@Daniel: Könntest du mir mal bitte Code zeigen, wie du dir das mit einen Timer vorstellst? :shock: @Trouble_Maker: Und was ist gegen meine Lösung einzuwenden? Die geht und ist sauber gelöst. Und nicht so ein gebastel mit einer Schleife und einer eingebauten Timer-Verzögerung. Wenn ich so wieso einen Timer brauche, dann brauche ich auch die Schleife nicht. |
Aber wenn du es unbedingt mit einer Schleuife machen willst, dann bitte so, dass die anwendung noch reagiert:
Delphi-Quellcode:
procedure delay(msec:longint);
var start,stop:longint; begin start := gettickcount; repeat stop := gettickcount; application.processmessages; until (stop - start ) >= msec; end; procedure TForm1.Button1OnClick(Sender: TObject); var i : Integer; begin for i := 10 downto 0 do begin Label1.Caption := IntToStr(i); Delay(1000); end; end; |
heyho ...
@Luckie: Danke deine Lösung funktioniert perfekt !!! danke für eure Mühe cu Trouble_Maker |
Delphi-Quellcode:
Wäre auch eine (nicht ganz so elegante) Möglichkeit. Dann muss man nur noch überprüfen ob i nicht 0 ist und fertig.
var
Form1: TForm1; i: Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := true; end; procedure TForm1.FormCreate(Sender: TObject); begin i := 10; end; procedure TForm1.Timer1Timer(Sender: TObject); //Timer Intervall 1000ms begin i := i -1; Label1.Caption := IntToStr(i); end; end. MfG Florian :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz