Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Counter mit Timer und Label (https://www.delphipraxis.net/5898-counter-mit-timer-und-label.html)

Trouble_Maker 22. Jun 2003 16:49


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

Daniel B 22. Jun 2003 16:53

Hallo,
Delphi-Quellcode:
for i := 10 downto 0 do
begin
  Label1.Caption := IntToStr(i);
end;
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.
Grüsse, Daniel :hi:

Luckie 22. Jun 2003 17:00

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;

Daniel B 22. Jun 2003 17:01

Zitat:

Zitat von Luckie
Wie soll man das mit einen Timer in Verbindung bringen?

Weil die Schelfie sonst zu schnell ist und man das runterzählen gar nciht sehen würde.

Grüsse, Daniel :hi:

Trouble_Maker 22. Jun 2003 17:02

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

Daniel B 22. Jun 2003 17:04

Zitat:

Zitat von Trouble_Maker
Aber er Springt direkt von der 10 auf die 0 !!! Also zählt nicht runter (10,9,8, ... 0 )

Das ist nicht ganz richtig, siehe mein letztes Posting. Die Schleife ist so schnell, das Du nur noch gleich die 0 angezeigst bekommst. Die Schleife an sich zählt schon richtig runter und zeigst es auch richtig an. Daher habe ich noch gesagt das ganze mithilfe eines Timers oder Sleep oder Delay verzögern, um auch wirklich jede Zahl an sich runterzählen sieht.

Grüsse, Daniel :hi:

Luckie 22. Jun 2003 17:06

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.

Luckie 22. Jun 2003 17:11

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;

Trouble_Maker 22. Jun 2003 17:13

heyho ...

@Luckie: Danke deine Lösung funktioniert perfekt !!!


danke für eure Mühe


cu Trouble_Maker

flomei 22. Jun 2003 17:17

Delphi-Quellcode:
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.
Wäre auch eine (nicht ganz so elegante) Möglichkeit. Dann muss man nur noch überprüfen ob i nicht 0 ist und fertig.

MfG Florian :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.
Seite 1 von 2  1 2      

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