D
Hallo Buddyman83
Ich hatte mich auch mal eine Weile damit auseinandergesetzt.
Leider kann ich dir den entsprechenden Code-Abschnitt nicht einfach so geben, da du höchstwahrscheinlich aufgrund anderer Datenstrukturen, sowieso nochmals alles komplett neu schreiben müsstest.
Aus diesem Grund hier ein paar Sachen, wie ich es gemacht hatte.
Oder besser gesagt, als Gedankenstütze.
Datum + Zeit zusammenführen
Ich habe es damals über "StrToDateTime" gelöst
//Gebietseinstellungen (Formatierungen) für DE-CH lesen
TFormatSettings G_tfsDateFormat = TFormatSettings::Create(2055);
//String entsprechend formatieren
//Diesen String könntest du nun aus den Werten der Boxen zusammensetzen
TDateTime complet = StrToDateTime("21.08.2011 03:01:00",tfsDateFormat);
Berechnungen
//Wenn du 1 zu TDateTime hinzuaddierst, kannst du den Tag um eins erhöhen
//Monat und Jahr werden ebenfalls automatisch angepasst
TFormatSettings G_tfsDateFormat = TFormatSettings::Create(2055);
TDateTime complet = StrToDateTime("21.08.2011 03:01:00",tfsDateFormat);
//Anschliessend ist folgendes gespeichert ("22.08.2011 03:01:00")
complet += 1;
//Wochentag ermitteln
//Den Wochentag eines TDateTime kannst du wie folgt auslesen
//Gibt 1 - 7 zurück (1 = Sonntag)
short weekDay = complet.DayOfWeek();
Funktion zu berechnetem Zeitpunkt ausführen
Wenn du dieses TDateTime berechnet hast, kannst du wie folgt eine Aktion ausführen
Du subtrahierst das Anfangsdatum vom erechnete Datum ab und erhältst so die Differenz in Tagen (gebrochene Zahl)
http://www.delphi-treff.de/tipps/object-pascal/datumswerte/differenz-zwischen-zwei-tdatetime-werten-ausgeben/
Nice to Know (PC im Standby)
Falls du willst, dass deine Funktion auch ausgeführt wird, wenn dein PC im Standby-Modus,... ist, dann solltest du dir mal den WaitableTimer ansehen "CreateWaitableTimer()" und "SetWaitableTimer()" -> Damit kannst du den PC kurz wecken.
-> Hier könnt ich dir ein Codebeispiel geben.
Monatlich,...
Ein weiterer wichtiger punkt, auch wenn er noch so banal scheint, ist die Thematik "Monatlich". [Vielleicht hast du dir darüber ja schon Gedanken gemacht].
Folgendes:
Sagst du, er soll jeden fünften Freitag im Monat eine Aktion ausführen, so hasst du ein Problem wenn der Monat keinen fünften Freitag besitzt.
In den Berechnungen musst du nun darauf eingehen und diese möglichen Komplikationen eliminieren.
- Soll der Termin ausgelassen werden
- Soll er auf den letzten Tag des Monats verschoben werden
- Soll er auf den letzten entsprechenden Wochentag des Monats verschoben werden
- etc.
Fazit
Mit der Möglichkeit, ein TDateTime-Objekt um x-Tage zu erhöhen und zurückzusetzen, sowie den Wochentag auszulesen, hasst du eigentlich alle Mittel, die du für die Berechnung brauchst.
Nun brauchst du nurnoch Hirnschmalz und Zeit um einen geeigneten Algorithmus für dein Problem zu schreiben.
Ich hoffe, ich habe nicht am Wesentlichen vorbeigeschrieben und dass ich dir ein wenig helfen konnte.