Delphi-PRAXiS
Seite 1 von 2  1 2      

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 DateTimePicker: zu einer gewissen Uhrzeit Funktion ausführen (https://www.delphipraxis.net/95176-datetimepicker-zu-einer-gewissen-uhrzeit-funktion-ausfuehren.html)

Helmi 2. Jul 2007 16:49


DateTimePicker: zu einer gewissen Uhrzeit Funktion ausführen
 
Hallo,

ich hätt da mal ne Frage:

Ich möchte zu einer Gewissen Uhrzeit etwas durchführen.

Bisher mach ich das so:
Delphi-Quellcode:
procedure TMainForm.Timer_UhrzeitTimer(Sender: TObject);
begin
  //prüfen ob Uhrzeit in Ordnung
  If TimeToStr(now) = TimeToStr(DateTimePicker_Uhr.Time) then
    begin
      //Timer disablen
      Timer_Uhrzeit.Enabled := false;

      //Procedure "Updaten" starten
      Updaten;

      //Timer enablen
      Timer_Uhrzeit.Enabled := true;
    end;
end;
Was mir daran nicht gefällt ist die Konvertierung in einen String.

Ich dachte mir, es müsse ja so auch gehen:
Delphi-Quellcode:
  If now = DateTimePicker_Uhr.Time then
Nur leider wird so nie etwas ausgeführt.

Das:
Delphi-Quellcode:
  If now >= DateTimePicker_Uhr.Time then
kann ich leider nicht nehmen, da ja nur zu einer Gewissen Uhrzeit etwas ausgeführt werden soll, nicht einem Gewissen Zeitraum.

Wie kann ich das auf Uhrzeit-Ebene prüfen?
Oder soll ich bei den Strings bleiben?

Phoenix 2. Jul 2007 16:53

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
Das Problem ist, dass die Uhrzeit ein Fließkommawert ist. Und Fließkommawerte lassen sich schlecht vergleichen.
Du müsstest die Uhrzeiten (also die Nachkommawerte) voneinander abziehen und prüfen, ob diese unterhalb einer gewissen Unschräftegrenze (z.B. 0,0001) liegen. Damit bist Du dann nah dran. Wenn die Auflösung des Timers dann so groß ist, dass Du genau einmal pro Tag in die Unschärfegrenze kommst passt das.

mkinzler 2. Jul 2007 16:54

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
Du mußt beide Werte Runden, so daß der Vergleich funktioniert

Helmi 2. Jul 2007 16:55

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
mmh

ich dachte das ginge einfacher.

Da bleib ich ja lieber bei der String-Konvertierung - die funktioniert wenigstens :-)

mkinzler 2. Jul 2007 16:56

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
das Runden sollte doch auch kein Problem sein.

Helmi 2. Jul 2007 17:01

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
Zitat:

Zitat von mkinzler
das Runden sollte doch auch kein Problem sein.

Wahrscheinlich mach ich nen Fehler - aber so gehts nicht:
Delphi-Quellcode:
  If Round(now) = Round(DateTimePicker_Uhr.Time) then

shmia 2. Jul 2007 17:59

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
Delphi-Quellcode:
procedure TMainForm.Timer_UhrzeitTimer(Sender: TObject);
var
  jetzt, bis : TDateTime;
begin
  jetzt := Time;
  // jetzt noch die Intervalzeit (in ms) umrechnen in Tage
  // und zur aktuellen Zeit addieren
  bis := jetzt + Timer_Uhrzeit.Interval / MSecsPerDay;

  //prüfen ob Uhrzeit im gültigen Bereich
  if (DateTimePicker_Uhr.Time >= jetzt) and (DateTimePicker_Uhr.Time<= bis) then
    begin
      //Timer disablen
      Timer_Uhrzeit.Enabled := false;
      try
        //Procedure "Updaten" starten
        Updaten;
      finally // <== sicherstellen, dass der Timer auch bei Fehler weiterläuft
        //Timer enablen
        Timer_Uhrzeit.Enabled := true;
      end;
    end;
end;

marabu 2. Jul 2007 18:03

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
Hallo,

auch mit der Funktion DateUtils.SecondsBetween() lässt sich ein Time Slot testen:

Delphi-Quellcode:
const
  DELTA_SECONDS = 1; // 0 entspräche dem String-Ansatz
begin
  if (Now >= DTP.DateTime)
  and (DateUtils.SecondsBetween(Now, DTP.DateTime) <= DELTA_SECONDS) then
  begin
    { ... };
  end;
end;
Grüße vom marabu

Sherlock 3. Jul 2007 08:35

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
Zitat:

Zitat von Helmi
Wahrscheinlich mach ich nen Fehler - aber so gehts nicht:
Delphi-Quellcode:
  If Round(now) = Round(DateTimePicker_Uhr.Time) then

Das liegt daran, das ein TDateTime im ganzzahligen Anteil Tage und im Nachkommaanteil die Zeit hat. Wenn Du nun ein round(Now) durchführst, dann bekommst Du nur Tage. Der Zeitanteil in Deinem TDateTime ist dann 0. Verglichen mit der Zeit in Deinem DateTimePicker, dem du die Tage von vorneherein weggenommen hast (DateTimePicker.Time) ist dann natürlich niemals eine Übereinstimmung möglich. Schau Dir in der Hilfe mal die Eigenschaften von TDateTime an.

Sherlock

Helmi 3. Jul 2007 16:00

Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
 
mmh

also wenn ich mir das alles so anschaue, find ich meine String-Variante am Einfachsten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.
Seite 1 von 2  1 2      

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