Вы не можете делать то, что хотите, потому что MonthCalendar, отображаемый в ответ на нажатие кнопки dropDown в DateTimePicker, представляет собой MonthCalendar, для которого не задан стиль MCS_DAYSTATE. Это решение Microsoft. Это не ограничение VCL, поэтому, насколько мне известно, вы ничего не можете сделать, чтобы его изменить. Единственное, что можно было бы сделать, это не использовать его и создать свой собственный собственный экземпляр MonthCalendar в ответ на нажатие пользователем кнопки раскрывающегося списка; или использовать некоторые из уже имеющихся пользовательских компонентов.
Чтобы доказать это, вот Pascal-версия того же кода C#, который вы опубликовали. Это не работает и, насколько мне известно, никогда не будет. Если вы хотите протестировать его, подключите его к событию DropDown объекта 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;
person
PA.
schedule
19.11.2010