![]() |
Wieder ein Countdown Problem
Liste der Anhänge anzeigen (Anzahl: 2)
Einen Wunderschönen Guten Morgen an alle!
Hab mich in letzter Zeit mit meinem Countdown Programm beschäftigt. Über ein DateTimePicker wählt man das Datum aus und über einen zweiten die Uhrzeit. Nach dem Klicken auf einen Button wird die Restzeit(Jahre, Monate, Tage, Stunden, Minuten, Sekunden) angezeigt. Das Programm wäre zu 100% fertig, wenn da nicht so ein Blöder Bug wäre: Wenn ich z.B. angebe er soll bis heute bis zu einer bestimmten Uhrzeit(die aber noch nicht vorbei ist) runterzählen, setzt er bei Jahre - 2005, Monate - 08, Tage - 17, also das Datum von Vorgestern. Setz ich aber das Datum auf Morgen sieht es so aus: Jahre - 2005, Monate - 08, Tage - 18, ein Tag mehr usw., was ja auch logisch ist. Wieso zählt er aber von diesem bestimmten Datum? Ich sitz jetzt an diesem Programm schon seit ca. 2 Monaten :coder: und war der Meinung ich schaffe es ohne irgendwelche Hilfe, falsch gedacht! Ich brauch euch Leute, es kann nicht so schwer sein so ein kleines Programm zum Laufen zu bringen? :?: Ich Poste einfach mal den ganzen Code hier und häng das Projekt gerart als Datei auch nochmal an. Mit der Angehängten EXE könnt ihr weiter rumprobieren.
Delphi-Quellcode:
Eine weitere Frage beschäftigt mich auch noch: leider zeigt er z.B. nur die Sekunden der aktuellen Minute an usw. er sollte mir aber die Gesamtsekunden, Gesamtminuten usw. anzeigen, ist es mit DecodeDate und DecodeTime möglich oder wie müsste ich es dann berechnen?
unit Main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Panel1: TPanel; Button1: TButton; Timer1: TTimer; DateTimePicker1: TDateTimePicker; Panel2: TPanel; Bevel1: TBevel; Bevel2: TBevel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; LJahre: TLabel; LMonate: TLabel; LTage: TLabel; LStunden: TLabel; LMinuten: TLabel; LSekunden: TLabel; DateTimePicker2: TDateTimePicker; Label9: TLabel; LDatum: TLabel; LZeit: TLabel; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } datum : TDate; zeit : TTime; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin datum := DateTimePicker1.Date; zeit := DateTimePicker2.Time; Timer1.Enabled := true; LDatum.Caption := DateToStr(datum); LZeit.Caption := TimeToStr(zeit); end; procedure TForm1.Timer1Timer(Sender: TObject); var Present: TDateTime; Year, Month, Day, Hour, Min, Sec, MSec: Word; begin Present:=(datum+zeit)-(date+time); DecodeDate(Present, Year, Month, Day); LJahre.Caption := IntToStr(Year); LMonate.Caption := IntToStr(Month); LTage.Caption := IntToStr(Day); DecodeTime(Present, Hour, Min, Sec, MSec); LStunden.Caption := IntToStr(Hour); LMinuten.Caption := IntToStr(Min); LSekunden.Caption := IntToStr(sec); end; end. Grüße Maddin-G |
Re: Wieder ein Countdown Problem
Hai Maddin-G,
mit einer Sache habe ich mich da auch einmal hereingelegt. Du hast zwar die Variablen
Delphi-Quellcode:
Dabei musst Du aber berücksichtigen das beide ein TDateTime sind. Sprich. Auch ein TTime kann einen Datumsanteil und ein TDate einen Zeitanteil haben.datum : TDate; zeit : TTime; Es wäre jetzt also möglich das beim:
Delphi-Quellcode:
nicht genau gearbeitet wird. Du könntest es einmal so versuchen:
procedure TForm1.Button1Click(Sender: TObject);
begin datum := DateTimePicker1.Date; zeit := DateTimePicker2.Time; .
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin datum := Trunc(DateTimePicker1.Date); // Ohne Zeitanteil zeit := Frac(DateTimePicker2.Time); // Ohne Datumsanteil end; |
Re: Wieder ein Countdown Problem
Hai, Danke für die schnelle Antwort, habs gleich ausprobiert, jetzt siehts so aus:
Jahre - 1899, Monate - 12, Tage - 30 |
Re: Wieder ein Countdown Problem
Eine gewagte Vermutung: Kann es sein, dass das Datum nicht ab dem heutigen Tag sondern ab "Geburt Christi" also ab einem bestimmten "Null-Datum" berechnet wird? Warum sonst steht da immer "Jahre 2005"?
Woher genau holst du dir denn die Info über das momentane Datum? |
Re: Wieder ein Countdown Problem
Zitat:
Zitat:
In date ist das Aktuelle Datum drin. |
Re: Wieder ein Countdown Problem
Seh ich das dann richtig, dass du mit Present die Differenz zwischen jetzt und dem ausgewählten Zeitpunkt bezeichnest? Also eigentlich das, was angezeigt werden soll.
Irgendwas läuft da komplett schief! Wenn ich das aktuelle Datum und die momentane Uhrzeit eingebe, zeigt er mir was mit 8 Monaten, 16 Tagen... an. (Und ne andere Sache: Es wär schön, wenn sich der Mauscursor beim Eingabefeld in den senkrechten Strich verwandeln würde. Dieses Kreuz ist etwas unpraktisch zum Text eingeben. Das aber nur am Rande) |
Re: Wieder ein Countdown Problem
Zitat:
Zitat:
Nur ich weiss nicht was. Deswegen hab ich hier Hilfe gesucht. Zitat:
|
Re: Wieder ein Countdown Problem
Hallo,
Du rechnest die Differenz zwischen den beiden Daten mit
Delphi-Quellcode:
aus. Somit erhälst Du die Anzahl der Tage, zwischen beiden Daten. Nun darfst Du aber nicht den Fehler machen und die Differenz in Jahren, Monaten usw. mit DecodeDate zu berechnen, da Du ja in diesem Fall kein Datum im klassischen Sinne hast.
Present:=(datum+zeit)-(date+time) // zur Info: Now entspricht Date+Time
Schau Dir einmal die Unit DateUtils an, dort gibt es Funktionen wie z.B. MonthsBetween, YearsBetween, SecondsBetween, usw. Diese Funktionen dürften Dir bei Deinem Problem weiterhelfen. |
Re: Wieder ein Countdown Problem
Hai Maddin,
ich würde einfach die Anzahl der Minuten oder Sekunden ermitteln bis zum Termin. Von dieser Zahl ausgehent kannst Du dann ja einfach berechnen wieviele Jahre/Tage/Stunden es sind.
Delphi-Quellcode:
[Edit]Da hat doch der Gollum dazwichen gepostet ;-) [/edit]
uses
dateutils; procedure TForm1.Button1Click(Sender: TObject); var datum : TDate; zeit : TTime; termin : TDateTime; jetzt : TDateTime; minuten : Cardinal; begin datum := Trunc(DateTimePicker1.Date); zeit := Frac(DateTimePicker2.Time); termin := datum + zeit; jetzt := now; minuten := MinutesBetween(jetzt,termin); ShowMessage(Format('Der Termin ist in %d Minuten',[minuten])); end; |
Re: Wieder ein Countdown Problem
Leute, ihr seid die Besten!
Hab's jetzt so gemacht:
Delphi-Quellcode:
LJahre.Caption := IntToStr(YearsBetween(now,datum+zeit));
LMonate.Caption := IntToStr(MonthsBetween(now,datum+zeit)); LTage.Caption := IntToStr(DaysBetween(now,datum+zeit)); LStunden.Caption := IntToStr(HoursBetween(now,datum+zeit)); LMinuten.Caption := IntToStr(MinutesBetween(now,datum+zeit)); LSekunden.Caption := IntToStr(SecondsBetween(now,datum+zeit)); Und es funktioniert! :hello: Beste! Ich liebe euch alle! :love: :kiss: Grüße Maddin-G |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr. |
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-2025 by Thomas Breitkreuz