Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Countdown erstellen (https://www.delphipraxis.net/120607-countdown-erstellen.html)

XPLOSIV 13. Sep 2008 15:38


Countdown erstellen
 
Ich wollte mal fragen wie ich einen Countdown realisieren kann ?
Also ein Label mit einer Zeit die runterläuft.

Leider hab ich keine Ahnung wie ich sowas angehen sollte. :oops:
Gibt es dafür eine passende Komponente ? Timer ?


Wäre sehr dankbar :)

alleinherrscher 13. Sep 2008 15:47

Re: Countdown erstellen
 
Hi, am einfachsten geht das mit nem timer, wobei du z.B. eine Anzahl an Sekunden als Startparameter eingibst

FCountdown:=250;


und damm im timer die Zeit runterzählst und in einem Label darstellst:


Delphi-Quellcode:

TForm1.OnTimer1(Sender:TObject);
begin

FCountdown:=FCountdown-1;
label1.caption:='Noch '+inttostr(FCountdown)+' sekunden!';

if FCountdown:=0 then
  Timer1.enabled:=False;


end;
Das ganze kannst du dann noch verbesseren, indem du die Anzahl an Sekunden auch in Stunden und Minuten umrechnest

Grüße

Helmi 13. Sep 2008 15:49

Re: Countdown erstellen
 
Zitat:

Zitat von alleinherrscher
Hi, am einfachsten geht das mit nem timer, wobei du z.B. eine Anzahl an Sekunden als Startparameter eingibst

FCountdown:=250;


und damm im timer die Zeit runterzählst und in einem Label darstellst:


Delphi-Quellcode:

TForm1.OnTimer1(Sender:TObject);
begin

FCountdown:=FCountdown-1;
label1.caption:='Noch '+inttostr(FCountdown)+' sekunden!';

if FCountdown:=0 then
  Timer1.enabled:=False;


end;
Grüße

Da ist ein Fehler drin:

Delphi-Quellcode:
TForm1.OnTimer1(Sender:TObject);
begin

FCountdown:=FCountdown-1; //könnte man auch als dec(FCountdown) schreiben

label1.caption:='Noch '+inttostr(FCountdown)+' sekunden!';

if FCountdown = 0 then //<== Abfrage, keine Zuweisung
  Timer1.enabled:=False;


end;

alleinherrscher 13. Sep 2008 15:52

Re: Countdown erstellen
 
Sorry, hast recht...tippfehler!


Naja, die Minuten bzw Stunden könnstest du dann so umrechnen:


Delphi-Quellcode:

Std:=FCountdown mod 3600;
Min:=FCountdown mod 60 - Std*60;

XPLOSIV 13. Sep 2008 15:55

Re: Countdown erstellen
 
Sorry, das kapiere ich jetzt nicht, was ist FCountdown ?
[Fehler] Unit1.pas(31): Undefinierter Bezeichner: 'FCountdown'

alleinherrscher 13. Sep 2008 16:00

Re: Countdown erstellen
 
Du müsstest FCountdown erstmal deklarieren, in unserem Fall wäre das ein Integer, den du am besten oben in deiner Unit unter "Private" deklarierst. Dann musst du dieser Variablen noch einen Wert zuweisen, nämlich die Anzahl an Sekunden, die runtergewählt wernden soll. Dabei kannst du z.B. bei dem OnFormShow Ereigniss (Doppelklick im Objektinspektor unter Ereignisse auf OnShow) den festen Wert 250 sekunden zuweisen, oder halt eine andere Anzahl an Sekunden, die du haben willst...

Grüße


Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
    FCountdown:integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
 FCountdown:=250;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 FCountdown:=FCountdown-1;
 Label1.caption:=inttostr(FCountdown);
 if FCountdown=0 then timer1.enabled:=False;
end;

end.

XPLOSIV 13. Sep 2008 16:01

Re: Countdown erstellen
 
Ich hab mir mal selbst was einfallen lassen^^

Timer1.Interval:=Timer1.Interval-1; //könnte man auch als dec(FCountdown) schreiben

label1.caption:='Noch '+inttostr(Timer1.Interval)+' sekunden!';

if Timer1.Interval = 0 then //<== Abfrage, keine Zuweisung
Timer1.enabled:=False;

klappt eigentlich ganz gut^^

XPLOSIV 13. Sep 2008 16:05

Re: Countdown erstellen
 
Alles klar aber er zählt die Sekunden viel zu schnell runter, wie kann ich das ändern ?

alleinherrscher 13. Sep 2008 16:06

Re: Countdown erstellen
 
Zitat:

Zitat von XPLOSIV
Ich hab mir mal selbst was einfallen lassen^^

Timer1.Interval:=Timer1.Interval-1; //könnte man auch als dec(FCountdown) schreiben

label1.caption:='Noch '+inttostr(Timer1.Interval)+' sekunden!';

if Timer1.Interval = 0 then //<== Abfrage, keine Zuweisung
Timer1.enabled:=False;

klappt eigentlich ganz gut^^

Das ist keine wirklich gute Idee. Den Timer kannst du dir als eine Art Objekt vorstellen, der in einem bestimmten Intervall einen angegebenen Sourcecode ausführt. Das Intervall, in welchem dieser Code ausgeführt wird, wird unter Timer1.intervall eingegeben. Du verkürzt also immer das Intervall zwischen zwei Timerereignissen...das macht keinen Sinn...

XPLOSIV 13. Sep 2008 16:33

Re: Countdown erstellen
 
Hat sich erledigt, Danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz