Autor Beitrag
Doomlittle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP Home
D7 Prof
BeitragVerfasst: Di 13.07.04 09:32 
Hi

Ich würde gerne in einem Label eine Uhr mitlaufen lassen (permanente Aktualisierung), die den Zeitabstand zwischen jetzt (DateTime) und einem Ereignis in der Zukunft (festgehalten als Wert in einer Ini Datei) mißt und dies in der Form "noch xx Stunden : XX Minuten : XX Sekunden" anzeigt.

Ich hab mir bereits hier im Forum die verschiedenen Beiträge zu Themen wie Timer, Zeit und Countdown angeschaut fand bis jetzt aber keine Möglichkeit mein Problem bzw. meine Programmieridee zu lösen da entweder immer Zeitabstände hochgerechnet oder nur auf Buttonklicks ausgegeben wurden.


Wo sollte das Ganze berechnet werden? (Create Ereignis?)
Wie kann man das Ganze berechnen ? (Timer?)

Danke im Vorraus für die Hinweise
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 13.07.04 10:19 
Hallo!

Wo ist denn das Problem? Du nimmst einen Timer, stellst diesen auf 1000 Millisekunden, sodaß du jede Sekunde die Anzeige aktualisieren kannst.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.FormCreate(Sender: TObject);
begin
  EventTime:=Now+1;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var RemainingTime:real;
var HoursRemaining,MinutesRemaining,SecondsRemaining:Integer;
begin
  RemainingTime:=EventTime-now;
  HoursRemaining:=Trunc(RemainingTime * 24);
  MinutesRemaining:=Trunc((RemainingTime*24-HoursRemaining)*60);
  SecondsRemaining:=Trunc(((RemainingTime*24-HoursRemaining)*60-MinutesRemaining)*60);
  Edit1.Text:=Format('%d:%d:%d',[HoursRemaining,MinutesRemaining,SecondsRemaining]);
end;


Cu,
Udontknow
Doomlittle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP Home
D7 Prof
BeitragVerfasst: Di 13.07.04 12:07 
Danke für die Antwort aber dein Code zählt nur 24h runter auf 0 und danach suche ich nicht. Ich möchte hingegen von jeder möglichen Zeit (zb noch 48h:27min:12sek) auf den Punkt 0 zählen.

Habs dahingehend versucht zu konfigurieren - war wohl aber Schmonz:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Timer1Timer(Sender: TObject);  
var RemainingTime:real;  
var HoursRemaining,MinutesRemaining,SecondsRemaining:Integer;  
begin  
  EventTime := StrToTime(ini_config.ReadString('A','B',''));
  RemainingTime := EventTime-now;  
  HoursRemaining := Trunc(RemainingTime * 24);  
  MinutesRemaining := Trunc((RemainingTime*24-HoursRemaining)*60);  
  SecondsRemaining := Trunc(((RemainingTime*24-HoursRemaining)*60-MinutesRemaining)*60);  
  Ereignis_Label.Caption := Format('%d:%d:%d',[HoursRemaining,MinutesRemaining,SecondsRemaining]);  
end;


Dabei kommt jetzt ein negativer Wert in der Anzeige raus ( -9000 irgendwas .. )

Edit:

Ah hab meinen Logikfehler gefunden .. nicht in der Timer Prozedur muss ich rumfuschen sondern im Create now+ X

Ich muss also lediglich rausfinden wie groß X ist (Abstand von Now zum gewünschten Zeitindex)

Moderiert von user profile iconUdontknow: Beiträge zusammengefasst
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 13.07.04 12:15 
Du kommst also nur nicht damit klar, den Wert EventTime aus einer Ini-Datei zu lesen. Benutze einfach die DF-Suche. :lupe:

Cu,
Udontknow
Doomlittle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP Home
D7 Prof
BeitragVerfasst: Di 13.07.04 12:18 
Traurig aber war, Eventtime gibt es nur ein einziges Mal innerhalb der Suche und zwar in diesem unseren Beitrag. In der Delphi Hilfe steht dieser Stichpunkt auch nicht drin, deswegen mußte ich es als Variable von TDateTime deklarieren.

Wie man Werte aus einer Ini liest ist mir im Übrigen klar und nicht meine Fragestellung ;)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 13.07.04 12:26 
Du bist mir einer... "Eventtime" ist doch nur ein Variablenname, den ich mir ausgedacht habe. :mrgreen:

Du solltest nach Suche in: Delphi-Forum, Delphi-Library READDATETIME schauen.

Cu,
Udontknow
Doomlittle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP Home
D7 Prof
BeitragVerfasst: Di 13.07.04 12:55 
Hm, hab erstmal mit WriteDateTime überprüft in welchem Format die Zeit eingetragen wird und diesen dann auf einen anderen Tag, eine andere Uhrzeit in der Zukunft geändert.

14.07.2004 13:58:10

Nehme ich jetzt im Form.Create

ausblenden Delphi-Quelltext
1:
2:
3:
with ini_config do begin
  EventTime := ReadDateTime('TimerTest','Forschung',0);
end;



und dann in der Timer Prozedur wie von dir beschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
RemainingTime:=EventTime-now;  
  HoursRemaining:=Trunc(RemainingTime * 24);
  MinutesRemaining := Trunc((RemainingTime*24-HoursRemaining)*60);
  SecondsRemaining := Trunc(((RemainingTime*24-HoursRemaining)*60-MinutesRemaining)*60);
  EreignisZeit_Label.Caption := Format('%d:%d:%d',[HoursRemaining,MinutesRemaining,SecondsRemaining]);


erhalte ich wieder einen sehr großen negativen Wert ( -916357:-8:-17 (zählt hoch in den negativen Bereich)


:roll:
Mein Gott wie peinlich ....
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 13.07.04 13:27 
Was für ein Datum wird denn ausgelesen? Wenn es irgendetwas um 1900 ist: Der Wert wird nicht gefunden, entweder ziehst du die Ini-Datei nicht korrekt an (falscher Pfad), oder evtl. ist die Sektion falsch.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
with ini_config do begin  
  EventTime := ReadDateTime('TimerTest','Forschung',0);  
  ShowMessage(DateTimeToStr(EventTime));
end;


Cu,
Udontknow
Doomlittle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP Home
D7 Prof
BeitragVerfasst: Di 13.07.04 13:32 
Das Datum (14.07.2004 13:58:10) wird richtig ausgelesen, ich habs mir bereits selbst in einer Message anzeigen lassen.

Es muss also an der Berechnung in der Timer Prozedur liegen.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 13.07.04 13:37 
Dann lass dir im Timer mal per FloatToStr die Werte EventTime,Now und RemainingTime ausgeben, den Timer dann am besten bei Aufruf disablen(oder einfach einen Breakpoint setzen).

Edit: Ich habe eine Vermutung, kannst du einmal die ganze Unit bitte posten? Oder zumindest die Komplette Prozedur FormCreate inklusive Rumpf?

Cu,
Udontknow
Doomlittle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP Home
D7 Prof
BeitragVerfasst: Di 13.07.04 13:53 
raus per PN
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 13.07.04 13:59 
Habe ich mir gedacht! :mrgreen:

Du hast die Variable EventTime zweimal deklariert, einmal als globale Variable der Unit, ein anderes Mal als lokale Prozedurvariable der Prozedur FormCreate! Damit existieren zwei unterschiedliche Variablen mit demselben Namen. Wenn eine Zuweisung nicht eindeutig ist, so gewinnt immer die lokale Variable, d.h. du hast den Wert aus der Ini-Datei an eine Variable übergeben, die nach Prozedurende nicht mehr existiert.

Nimm einfach die Deklaration der lokalen Variable weg, dann funktioniert es.

Cu,
Udontknow
Doomlittle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP Home
D7 Prof
BeitragVerfasst: Di 13.07.04 14:01 
Tatsache, vielen vielen Dank.

Dümmlicher Fehler :twisted:

Kann dann geschlossen werden ;)
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 13.07.04 14:07 
Keine Ursache. Setze doch bitte das Erledigt-Flag, indem du deinen ersten Beitrag editierst (der grüne Haken).

Cu,
Udontknow