warum das nicht geht?
laß mal dein Programm, bei DeddyH's Code für einen Sekündchen hängen ... schwußt, die x:00:00 würde übersprungen und es passiert nix
und bei Now = StrToTime('16:00:00') wird, wenn das nicht "fast" auf die Millisekunde genau um 16°° verglichen wird, auch nie was passieren.
bei "meinem" Code kannst du den Timer auch locker im Minuten-Interval laufen lassen,
aber selbst ein 1-Sekundenintervall würde nicht wirklich viele Systemresourcen verbrauchen.
bei DeddyH's Code sollte der Timer schon sicherheitshalber mehrmals pro Sekunde diesen Vergleich ausführen und selbs da ist es nicht sicher, daß das Ereignis ausgelöst wird (wie gesagt, da braucht nur der Rechner mal kurz etwas zu sehr ausgelastet sein)
Da du ja 19°° auch noch haben möchtest, wird also auf kleiner 20°° geprüft.
theoretisch würde es auch ausreichen, wenn z.B. etwa so geprüft würde:
If (Stunde >= '06:00:00') and (Stunde < '19:05:00')
aber ganze Zahlen sehen auch nett aus
Die Prüfung ob es Zeit zur Anzeige ist, erfollgt meißt kurz nach der vollen Stunde,
also könnte bei (Frac(Time) <= StrToTime('19:00:00')) das 19°°-Ereignis ausfallen
aber mir fällt grad was auf ... das Frac bei der Stundenprüfung macht kleine Probleme bei Tageswechsel, also wenn das Programm die Nacht durchläuft.
and (Trunc(Time * 24) > Trunc(LastTime * 24)) Then Begin
hier werden jeweils die Stunden vor das Komma (siehe
TDateTime) verschoben und dann verglichen
und sobald sich die errechnete Zahl(Zeit) ändert, wird die Nachricht angezeigt.
(x = Anzahl der Tage seit 30.12.1899)
12:00 = x.5 ... x.5 * 24 = 12.0
6:00 = x.25 ... x.25 * 24 = 6.0
6:12 = x.2583 ... x.2583 * 24 = 6.2 ... Trunc(6.2) = 6