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;
И результатом будет это