TMonthCalendar & Delphi Styles (Delphi XE2)

TMontCalendar выглядит как оболочка Windows, поэтому новые стили VCL не могут на него повлиять. Знаете ли вы решение для этого?

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;

И результатом будет это

Другие вопросы по тегам