Wie Sie programmgesteuert markieren Sie ein Datum in Delphi TDateTimePicker Kalender?
Wenn der Benutzer auf einen DateTimePicker, legen Sie auf den Dropdown-Kalender, ich möchte verschiedene Termine (wählbar über code, den ich erstellen), um hervorgehoben, die in irgendeiner Weise--farbiger hintergrund, Fettschrift, farbige Schrift, ist es egal. Ich möchte nur bestimmte Daten markiert werden. ... Wie kann ich dies tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können dies tun. Zuerst müssen Sie zum initialisieren der Steuerung:
(
uses CommCtrl
).Dann klicken Sie einfach auf die Sie reagieren müssen, um die
MCN_GETDAYSTATE
Benachrichtigung. Sie können entweder erstellen Sie Ihre eigenenTDateTimePicker
Nachkomme, oder Sie können ein 'Abfangjäger'.Weiteres Beispiel: nehmen Sie an, dass die aktuelle Anzeige besteht aus drei Monaten, und dass Sie nur wollen, wählen Sie die Tage in der "aktuell angezeigten Monats", das heißt, in der Mitte Monat. Angenommen, Sie möchten jeden Dritten Tag ausgewählt werden, beginnend mit einem ausgewählten Tag.
Dann werden Sie wollen, verwenden Sie die bitfields
die
in hexadezimal. So müssen Sie
DTM_GETMCSTYLE
wurde in Vista eingeführt wurde.prgDayState
Puffer... Die Dokumentation ist nicht ganz klar in diesem Punkt.WM_NOTIFY
Nachricht im Falle einerMCN_GETDAYSTATE
- Benachrichtigung wird gesendet, um das Datum und Uhrzeit Picker-Steuerelement und nicht auf das übergeordnete Element des-Monats-Kalender-Steuerelement, wie es immer tut. Die eigentlichen Eltern der Monats-Kalender ist eine "DropDown" - Klasse, die DropDown-oder das MonthCalendar-hat kein Fenster relation mit dem Datum und Uhrzeit Picker - kein parentship, kein Eigentum. Ich Frage mich, welche Art des Schwindels hat der Fenster-manager spielen. Trotzdem, vielen Dank für den code.OnGetMonthInfo Ereignis sieht BoldDays array zu markieren Tage in einem Monat.
Auszug aus der Hilfe :
Schauen Sie in der Hilfe.
Edit :
DateTimePicker.BoldDays zugänglich ist.
OnGetMonthInfo veraltet ist in Delphi XE, verwenden Sie OnGetMonthBoldInfo statt.
Noch nicht herausgefunden beste Weg, um wieder die Veranstaltung noch.
Edit 2 :
Ich hatte ein zu gehen mit der Wiedereinführung der Fall, aber es scheint, dass die windows-Meldung ist nicht gebunden in TDateTimePicker. Schade.
Ich denke, Andreas Lösung mit geradeaus auf die Meldung windows api ist die beste.
TMonthCalendar
, und nichtTDateTimePicker
.TCommonCalendar
, anchestor für beide TMonthCalendar und TDateTimePicker - vielleicht ist es immer noch möglich, verwenden Sie es mit TDateTimePicker? Obwohl die TDateTimePicker nicht veröffentlichen...