Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Timerrestzeit in label !?


einfach112 - Di 08.02.05 00:41
Titel: Timerrestzeit in label !?
Halli Hallo !
Ich bin mal wieder dabei ein kleines programm zu schreiben !
Mein Problem ist diesmal folgendes....
ich habe ca. 5-6 timer auf meiner form sitzen und einer dieser timer läuft ganz genau : 28800000 was um es genau zu sagen auf stoltze 8 Stunden bringt....
nach diesen 8 Stunden wird auf meinem PC eine Aktion durchgeführt !
da ich aber nicht immer den ganzen tag vor dem PC sitze mit einer Stoppuhr wollte ich mir nun eine Art countdown machen der halt startet sobald der timer auch aktiv ist. also so nach dem Motto :
Nächste Aktion beginnt in ca : 07:56:15 und dann halt jede sekunde eine sekunde weniger bis halt dann auf 00:00:00 bis halt die zeit erreicht wird
Ich habe schon in 3 Foren nach counter und countdown und timer und sonst allem gesucht ! aber leider fand ich nirgendwo eine einfache lösung für mein Problem....
Ist es nicht möglich irgendwie die Restzeit des Aktuell laufenden timers einfach jede sekunde neu in ein Label zu schreiben !?
Wenn doch hat da jemand nähere Infos zu wie man das machen könnte bzw. kann
oder hat sonst noch jemand eine einfache und schnell Idee dazu ?!


Bin wie immer über jede idee und Antwort dankbar !
Mfg
Einfach112


einfach112 - Di 08.02.05 00:58
Titel: schon gefunden....
also auf die schnelle habe ich das mal so gelöst :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Timer1Timer(Sender: TObject);
var
ablaufzeit : integer;
restzeit : integer;
begin
ablaufzeit := strtoint(label1.caption);
restzeit := ablaufzeit-1;
label1.caption:=inttostr(restzeit);
if ablaufzeit < 1 then
label1.Caption:='10';
 end;


naja hoffe das macht mir auf die schnelle keine probleme !
MfG
Einfach112

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


BenBE - Di 08.02.05 01:04
Titel: Re: Timerrestzeit in label !?
einfach112 hat folgendes geschrieben:
Ist es nicht möglich irgendwie die Restzeit des Aktuell laufenden timers einfach jede sekunde neu in ein Label zu schreiben !?
Wenn doch hat da jemand nähere Infos zu wie man das machen könnte bzw. kann
oder hat sonst noch jemand eine einfache und schnell Idee dazu ?!

Das Problem ist zwar etwas außergewöhnlich und wird meist nicht über Timer realisiert, aber:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  NextTimer:DWORD;//Reicht für 49,7 Tage, wenn Windows nicht bereits vorher abstürzt

procedure TForm1.Dein8StundenTimer(Sender:TObject);
begin
//DoSomething

  NextTimer := GetTickCount + DWORD(TTimer(Sender).Intervall);
end;

procedure TForm1.DeinUpdateTimer(Sender:TObject);
begin
    Label1.Caption := IntToStr(NextTimer - GetTickCount) + 'ms verbleibend!';
end;


Socher - Di 08.02.05 03:10
Titel: Ein Time mit n Stopuhren
Vieleicht noch eine Alternative die auch die verbleibenden Tage berücksichtigt.

Ein ausbaubares Beispiel das mit einem Timer für beliebig viele Stopuhren auskommt.
Der Timer dient nur der Aktualisierung der Daten zur Anzeige.
Je nach dem wie genau mas es mag.


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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    BitBtn1: TBitBtn;
    LabelRestZeit1: TLabel;
    LabelStartZeit: TLabel;
    LabelZielZeit: TLabel;
    procedure BitBtn1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  DTime:array[1..5,1..2of double;
  DTimeSet:array[1..5of boolean;
implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Dtime[1,1]:=date+time;
LabelStartZeit.Caption:='Startzeit '+datetimetostr(DTime[1,1]);
DTime[1,2]:=date+time+1/3// + 8h = 1/3 Tag
LabelZielZeit.Caption:='Zielzeit '+datetimetostr(DTime[1,2]);
DTimeSet[1]:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var d:word;
begin
if DTimeSet[1then
  begin
  d:=trunc(Dtime[1,2])-trunc(date);
  Form1.LabelRestZeit1.caption:='Restzeit '+inttostr(d)+' Tage und '+timetostr(Dtime[1,2]-(date+time));
  end;
end;

end.


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.