İstediğiniz şeyi yapamazsınız, çünkü DateTimePicker'da dropDown düğmesine basıldığında çıkan MonthCalendar, MCS_DAYSTATE stil kümesine sahip olmayan bir MonthCalendar'dur. Bu bir Microsoft karardır. Bu bir VCL sınırlaması değildir, bu yüzden hiçbir şeyim yoktur, benim bilgime göre bunu değiştirmek için yapabilirsiniz. Tek şey, onu kullanmamak ve açılan düğmenin kullanıcı tuşuna yanıt olarak gerçek bir MonthCalendar'unuzu kendi başınıza oluşturmak değildir; veya mevcut olan özel bileşenlerden bazılarını kullanın.
Bunu kanıtlamak için, burada yüklediğiniz aynı C# kodunun Pascal sürümüdür. İşe yaramıyor ve asla bilmeyeceğim. Test etmek isterseniz, DateTimePicker'ın DropDown olayına bağlayın.
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;
+1, thx. –