2012-04-10 2 views
3

TMontCalendar, похоже, является оберткой Windows, поэтому новые стили VCL не могут быть затронуты, знаете ли вы решение для этого?TMonthCalendar & Delphi Styles (Delphi XE2)

+3

До RRUZ дает вам решение, которое вы можете прочитать о [VCL-стили, и владелец -draw] (http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/). В частности [TStyleHook] (http://docwiki.embarcadero.com/Libraries/en/Vcl.Themes.TStyleHook). –

+1

Вот кто-то, кто взломал TWebBrowser, чтобы использовать стили VCL: http://theroadtodelphi.wordpress.com/2012/03/20/delphi-vcl-styles-and-twebbrowser-source-code-released/ –

+1

И это также может помочь http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/ –

ответ

6

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; 

И результат будет таким

enter image description here enter image description here

+0

OK Я был более или менее на одном и том же. Но у вас действительно более ясный и умный! – philnext