AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wieder ein Countdown Problem

Ein Thema von Maddin-G · begonnen am 19. Aug 2005 · letzter Beitrag vom 19. Aug 2005
Antwort Antwort
Maddin-G

Registriert seit: 2. Mär 2005
Ort: Gelnhausen
8 Beiträge
 
Delphi 2005 Professional
 
#1

Wieder ein Countdown Problem

  Alt 19. Aug 2005, 07:21
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 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:
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.
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?


Grüße

Maddin-G
Angehängte Dateien
Dateityp: exe timernizer_185.exe (414,0 KB, 11x aufgerufen)
Dateityp: rar timernizer_200.rar (8,4 KB, 10x aufgerufen)
Ein Werkzeug kann immer nur so gut sein, wie der, der es bedient!
Das Problem befindet sich meistens zwischen Bildschirm und Rückenlehne!
A fool with a tool is still a fool.
{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 07:32
Hai Maddin-G,

mit einer Sache habe ich mich da auch einmal hereingelegt. Du hast zwar die Variablen
Delphi-Quellcode:
    
datum : TDate;
zeit : TTime;
Dabei musst Du aber berücksichtigen das beide ein TDateTime sind. Sprich. Auch ein TTime kann einen Datumsanteil und ein TDate einen Zeitanteil haben.

Es wäre jetzt also möglich das beim:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
      datum := DateTimePicker1.Date;
      zeit := DateTimePicker2.Time;
.
nicht genau gearbeitet wird. Du könntest es einmal so versuchen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  datum := Trunc(DateTimePicker1.Date); // Ohne Zeitanteil
  zeit := Frac(DateTimePicker2.Time); // Ohne Datumsanteil
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Maddin-G

Registriert seit: 2. Mär 2005
Ort: Gelnhausen
8 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 07:37
Hai, Danke für die schnelle Antwort, habs gleich ausprobiert, jetzt siehts so aus:


Jahre - 1899, Monate - 12, Tage - 30
Ein Werkzeug kann immer nur so gut sein, wie der, der es bedient!
Das Problem befindet sich meistens zwischen Bildschirm und Rückenlehne!
A fool with a tool is still a fool.
{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Kara
Kara

Registriert seit: 2. Aug 2005
113 Beiträge
 
#4

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 08:30
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?
--- yesterday is gone, tomorrow has not yet come, we have only today. let us begin. ---
  Mit Zitat antworten Zitat
Maddin-G

Registriert seit: 2. Mär 2005
Ort: Gelnhausen
8 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 08:40
Zitat von Kara:
Woher genau holst du dir denn die Info über das momentane Datum?

Zitat von Maddin-G:
      Present:=(datum+zeit)-(date+time);

In date ist das Aktuelle Datum drin.
Ein Werkzeug kann immer nur so gut sein, wie der, der es bedient!
Das Problem befindet sich meistens zwischen Bildschirm und Rückenlehne!
A fool with a tool is still a fool.
{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Kara
Kara

Registriert seit: 2. Aug 2005
113 Beiträge
 
#6

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 08:54
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)
--- yesterday is gone, tomorrow has not yet come, we have only today. let us begin. ---
  Mit Zitat antworten Zitat
Maddin-G

Registriert seit: 2. Mär 2005
Ort: Gelnhausen
8 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 09:13
Zitat von Kara:
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.
Da kann ich dir zustimmen.


Zitat von Kara:
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.
Da kann ich dir auch zustimmen, das da was schiefläuft.

Nur ich weiss nicht was.

Deswegen hab ich hier Hilfe gesucht.


Zitat von Kara:
(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)
Werd ich zur Kenntnis nehmen.
Ein Werkzeug kann immer nur so gut sein, wie der, der es bedient!
Das Problem befindet sich meistens zwischen Bildschirm und Rückenlehne!
A fool with a tool is still a fool.
{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 09:16
Hallo,

Du rechnest die Differenz zwischen den beiden Daten mit Present:=(datum+zeit)-(date+time) // zur Info: Now entspricht Date+Time 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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 09:29
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:
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;
[Edit]Da hat doch der Gollum dazwichen gepostet [/edit]
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Maddin-G

Registriert seit: 2. Mär 2005
Ort: Gelnhausen
8 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Wieder ein Countdown Problem

  Alt 19. Aug 2005, 09:35
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!

Beste!

Ich liebe euch alle!



Grüße

Maddin-G
Ein Werkzeug kann immer nur so gut sein, wie der, der es bedient!
Das Problem befindet sich meistens zwischen Bildschirm und Rückenlehne!
A fool with a tool is still a fool.
{KDT}
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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