You cannot do what you want, because the MonthCalendar displayed in response to the dropDown button clicks on DateTimePicker, it is a MonthCalendar that does not have MCS_DAYSTATE styleset. This is a Microsoft solution. This is not a limitation of VCL, so as far as I know, nothing can be done to change it. The only thing that would not be to use it and create an instance of the real MonthCalendar yourself in response to a button click by a button click; or use some of the existing components.
To prove this, here is the Pascal version of the same C # code as you. This does not work, and as far as I know, this will never happen. If you want to test it, connect it to the DropDown event for DateTimePicker.
procedure TForm1.DateTimePicker1DropDown(Sender: TObject); var monthCalHandle: THandle; boldDates: array[0..2] of integer; begin { obtain the MonthCalendar handle using the DTM_GETMONTHCAL message note that the handle returned changes for every time the drop down calendar is displayed. } monthCalHandle := SendMessage(dateTimePicker1.Handle, DTM_GETMONTHCAL, 0, 0); { Send the MCM_SETDAYSTATE message. This message takes an array of 3 MONTHDAYSTATEs. Every MONTHDAYSTATE is a bit set that represents a month. Each bit (0 through 30) represents the state of a day. Whan a bit is on, its corresponding day is emphasized in the MonthCalendar } boldDates[0]:=$5a5a5a; boldDates[1]:=$5a5a5a; boldDates[2]:=$5a5a5a; SendMessage(monthCalHandle, MCM_SETDAYSTATE, 3, integer(@boldDates)); end;
source share