TMonthCalendar与德尔福样式(德尔福XE2)(TMonthCalendar & Delp

2019-09-16 11:24发布

TMontCalendar似乎是一个Windows的包装,因此它不能被新的VCL风格的影响,你知道它的解决方案?

Answer 1:

TMonthCalendar是包装MONTHCAL_CLASS而且据我知道这个控件不支持业主平局,但提供了CalColors属性,让你可以设置日历的元素的颜色,但此属性只当主题不工作启用。 所以,首先你必须调用SetWindowTheme功能禁用日历中的主题,然后你可以设置颜色,以配合VCL风格。

像这样的事情

uses
  Vcl.Styles,
  Vcl.Themes,
  uxTheme;

Procedure SetVclStylesColorsCalendar( MonthCalendar: TMonthCalendar);
Var
  LTextColor, LBackColor : TColor;
begin
   uxTheme.SetWindowTheme(MonthCalendar.Handle, '', '');//disable themes in the calendar
   MonthCalendar.AutoSize:=True;//remove border

   //get the vcl styles colors
   LTextColor:=StyleServices.GetSystemColor(clWindowText);
   LBackColor:=StyleServices.GetSystemColor(clWindow);

   //set the colors of the calendar
   MonthCalendar.CalColors.BackColor:=LBackColor;
   MonthCalendar.CalColors.MonthBackColor:=LBackColor;
   MonthCalendar.CalColors.TextColor:=LTextColor;
   MonthCalendar.CalColors.TitleBackColor:=LBackColor;
   MonthCalendar.CalColors.TitleTextColor:=LTextColor;
   MonthCalendar.CalColors.TrailingTextColor:=LTextColor;
end;

其结果将是这个



文章来源: TMonthCalendar & Delphi Styles (Delphi XE2)