我尝试通过CalColors更改TMonthCalendar的设置,但它不起作用。无论是在设计时还是在运行时。日历保持不变。
更新:
看起来有人在Quality Central上报告了同样的问题:
http://qc.embarcadero.com/wc/qcmain.aspx?d=53494
答案 0 :(得分:7)
正如David所说,TMonthCalendar
internaly使用MCM_SETCOLOR
消息来设置控件的颜色,但是当视觉样式处于活动状态时,此消息不起作用。作为解决方法,您可以使用SetWindowTheme
函数仅禁用此控件上的视觉样式。
试试这个样本:
uses
UxTheme;
SetWindowTheme(MonthCalendar1.Handle, '', '');
MonthCalendar1.CalColors.MonthBackColor:=clWebKhaki;
MonthCalendar1.CalColors.TitleBackColor:=clWebDarkOrange;
答案 1 :(得分:3)
此行为按设计。该控件是Win32控件的包装器。请查看MCM_SETCOLOR
的文档。在评论中你会发现这个陈述。
如果视觉样式处于活动状态,则此消息无效,除非wParam为MCSC_BACKGROUND。
我认为在Vista及更高版本中,即使尝试设置MCSC_BACKGROUND
(与CalColors.BackColor
相对应)也无效。
如果在应用程序中禁用视觉样式,您确实可以看到CalColors
中指定的设置已应用。