Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Probleme mit DateTimePicker (https://www.delphipraxis.net/31993-probleme-mit-datetimepicker.html)

shAd 16. Okt 2004 20:01


Probleme mit DateTimePicker
 
Wünsche euch einen guten Abend,

Ich versuche einen Countdown zu schreiben, ich habe mir als Eingabemöglichkeit nen DateTimePicker ausgesucht, da falscheingaben dort nicht möglich sind, und er mir zumindestens eigentlich schon alles im richtigen Format liefert.

Nun habe ich mir eine Funktion geschrieben:

Code:
  private
    { Private-Deklarationen }
    function startcountdown(Wert: TTime): TTime;
....
function TForm1.startcountdown(Wert: TTime): TTime;
begin
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'einstellungen.ini');
Timer := Time + Wert;
Ini.WriteTime('Main','Countdown Time',Wert);
sndPlaySound(nil, snd_sync or snd_NoDefault);

DateTimePicker1.Time := Wert;
Form1.FormStyle := fsNormal;
Timer1.Enabled := TRUE;
Form1.Color := clTeal;
Label1.Font.Color := clRed;

end;
Mit ihr wird der Countdown gestartet.

Aufgerufen habe ich sie so:

Code:
startcountdown(DateTimePicker1.Time);
Stoppen ist im OnTimer Objekt meines Timers. Und sieht so aus:

Code:
  if(Time <> Timer) then begin
     Label1.Caption := FormatDateTime('hh":"mm":"ss',Time-Timer);
     Form1.Caption := 'Count-O-mAt - ' + FormatDateTime('hh":"mm":"ss',Time-Timer);
     Application.Title := FormatDateTime('hh":"mm":"ss',Time-Timer) + ' - Count-O-mAt';
     CoolTrayIcon1.Hint := FormatDateTime('hh":"mm":"ss',Time-Timer) + ' Stunden verbleibend';
     ......
  end
  else begin
  Timer1.Enabled := FALSE;
  .....
  Und die anderen Dinge die gemacht werden sollen wenn der Timer durch ist
  .....
Nun habe ich seitdem ich von MaskEdit1 auf den DateTimePicker umgestiegen bin das Problem, das er zwar brav bis 0 runtercounted, dann aber bei 23:59:59 wieder anfängt. Und die Bedingung - Timer ist nichtmehr gültig tirtt irgendnwie nicht mehr ein

Programm liefert auch ne Warnung beim Compilieren: "Rückgabewert von startcountdown könnte undefiniert sein". Wobei so wie ich das sehe hat, und braucht meine Funktion keinen Rückgabewert.

Vielleicht hilft mir jemand auf die Sprünge, sieht mir nach nem ganz bösen logischem Fehler aus. ;)

Vielen Dank schonmal im Vorraus für eure Hilfe!

Viele Grüße
shAd

Keldorn 16. Okt 2004 20:36

Re: Probleme mit DateTimePicker
 
Hallo

habe jetzt nicht groß drübergeschaut, aber:
Zitat:

if(Time <> Timer) then begin
...
else begin
Timer1.Enabled := FALSE;
Tdatetime ist ein double-wert, darin enthalten sind auch die millisekunden ... Die Wahrscheinlichkeit, das time=timer ist und damit dein Timer1 gestoppt wird, ist nahe 0, da es schwer sein wird, genau diesen Punkt zu treffen.
Nimm besser
Delphi-Quellcode:
if time<= timer then
Mfg Frank

shAd 16. Okt 2004 21:51

Re: Probleme mit DateTimePicker
 
danke dir, hat leider nichts am Problem geändert.

Gruber_Hans_12345 16. Okt 2004 22:19

Re: Probleme mit DateTimePicker
 
ich würde mal auf
Delphi-Quellcode:
if time >= timer then
tippen ... (falls nicht, dann poste den ganzen code )

[edit]
So ein Blödsinn, (was so ein Gläschen guter Rotwein mit den grauen Zellen alles anrichten kann tststs ....)

natürlich muß das so wie von Keldorn geschrieben lauten
Delphi-Quellcode:
if time <= timer then
der einzige fall, wäre wenn der timer auf nächsten Tag gestellt wird, dann mußt du einfach überall statt Time einfach now verwenden z.b.:
Delphi-Quellcode:
function TForm1.startcountdown(Wert: TTime): TTime;
begin
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 
    'einstellungen.ini');
Timer := now+ Wert;
und
Delphi-Quellcode:
if now <= timer then
[/edit]


und wenn deine Funktion keinen Rückgabewert braucht, dann mach doch ne procedure draus, dann meckert der Compiler auch nicht

shAd 16. Okt 2004 22:51

Re: Probleme mit DateTimePicker
 
Hallo,
Ich danke dir!

Code:
if now <= timer then
hat geholfen. Woran lag das den nun genau, das dies funktioniert? Vorher hatte ich nen Edit1, dannach nen EditMask1 Feld. Mit beiden hat es siehe oben funktioniert. Stehe grad bisle auf dem Schlauch. Vielleicht morgen mit klarem Kopf nochmal anschauen, ne kurze Erläuterung wäre aber lieb.

gruß
shAd

nailor 16. Okt 2004 23:12

Re: Probleme mit DateTimePicker
 
das du nicht nacheinander jeden wert bekommst (von der zeit), sondern das in kleinen sprüngen hüpft. d.h. du triffst nicht mit sicherheit (sogar ziemlich unwahrscheinlich) genau die zeit. wenn du aber testest, ob der angegebene zeitpunkt überschritten ist, klappt alles wunderbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 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