Thema: Delphi Timer-Problem

Einzelnen Beitrag anzeigen

Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Timer-Problem

  Alt 19. Jul 2008, 11:43
Du willst also die Zeit im Sekundentakt oben im formular hochlaufen lassen, bis es 12:26 ist, wie sie unten in der Liste steht. Dann hätt ich jetzt mal dein Problem verstanden, oder?

Zeiten (und Datum) speichert man in Delphi in TDateTime Typen, dazu brauchst du also nicht umständlich irgendwelche Strings auseinande zu pflücken oder Stunden und Minuten zu extrahieren.

Ich würde 2 Properties definieren, welche deine beiden Zeiten beinhalten (Jetzt und BisZeit). In der Setter-Methode kannst du z.B. deine Darstellung aktualiseren. Somit brauchst du nirgends, ausser in der Setter-Methode, deine Labels anzufassen, und arbeitest ausschliesslich mit deinen Eigenschaften.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    lblJetzt: TLabel;
    lblBisZeit: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FJetzt: TDateTime;
    FBisZeit: TDateTime;
    procedure SetJetzt(const Value: TDateTime);
    procedure SetBisZeit(const Value: TDateTime);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    property Jetzt : TDateTime read FJetzt write SetJetzt;
    property BisZeit : TDateTime read FBisZeit write SetBisZeit;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }



procedure TForm1.FormCreate(Sender: TObject);
begin
     Jetzt := Now ;
     BisZeit := Jetzt + EncodeTime(0,0,5,0);
     timer1.Enabled := true;
end;

procedure TForm1.SetBisZeit(const Value: TDateTime);
begin
  FBisZeit := Value;
  lblBisZeit.Caption := TimeToStr(FBisZeit) ;
end;

procedure TForm1.SetJetzt(const Value: TDateTime);
begin
  FJetzt := Value;
  lblJetzt.Caption := TimeToStr(FJetzt) ;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     Jetzt := Now ;
     if (Jetzt >= BisZeit) then begin
         timer1.Enabled := false;
         ShowMessage ('Countdown abgelaufen') ;
     end;

end;

end.
Angehängte Dateien
Dateityp: zip timer_681.zip (233,5 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat