无法为TMonthCalendar设置颜色

时间:2013-01-04 11:11:44

标签: delphi

我尝试通过CalColors更改TMonthCalendar的设置,但它不起作用。无论是在设计时还是在运行时。日历保持不变。

更新:
看起来有人在Quality Central上报告了同样的问题:
http://qc.embarcadero.com/wc/qcmain.aspx?d=53494

2 个答案:

答案 0 :(得分:7)

正如David所说,TMonthCalendar internaly使用MCM_SETCOLOR消息来设置控件的颜色,但是当视觉样式处于活动状态时,此消息不起作用。作为解决方法,您可以使用SetWindowTheme函数仅禁用此控件上的视觉样式。

试试这个样本:

uses
  UxTheme;

   SetWindowTheme(MonthCalendar1.Handle, '', '');
   MonthCalendar1.CalColors.MonthBackColor:=clWebKhaki;
   MonthCalendar1.CalColors.TitleBackColor:=clWebDarkOrange;

enter image description here

答案 1 :(得分:3)

此行为按设计。该控件是Win32控件的包装器。请查看MCM_SETCOLOR的文档。在评论中你会发现这个陈述。

  

如果视觉样式处于活动状态,则此消息无效,除非wParam为MCSC_BACKGROUND。

我认为在Vista及更高版本中,即使尝试设置MCSC_BACKGROUND(与CalColors.BackColor相对应)也无效。

如果在应用程序中禁用视觉样式,您确实可以看到CalColors中指定的设置已应用。