2012-04-10 18 views
3

TMontCalendar scheint ein Windows-Wrapper zu sein, so dass er nicht von den neuen VCL-Styles beeinflusst werden kann, kennen Sie eine Lösung dafür?TMonthCalendar & Delphi Styles (Delphi XE2)

+3

Bis RRUZ Sie die Lösung haben Sie vielleicht lesen möchten [vcl-Arten-und-Inhaber -draw] (http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/). Insbesondere [TStyleHook] (http://docwiki.embarcadero.com/Libraries/en/Vcl.Themes.TStyleHook). –

+1

Hier ist jemand, der TWebBrowser gehackt VCL Arten zu verwenden: http://theroadtodelphi.wordpress.com/2012/03/20/delphi-vcl-styles-and-twebbrowser-source-code-released/ –

+1

Und das kann auch helfen http://theroaddodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/ –

Antwort

6

Die TMonthCalendar ist Wrapper für die MONTHCAL_CLASS und so weit ich weiß, diese Kontrolle nicht Eigentümer Unentschieden nicht unterstützt, sondern bietet die CalColors Eigenschaft, die Sie erlaubt, die Farben der Elemente des Kalenders zu setzen, aber diese Eigenschaft funktioniert nur, wenn Die Themen sind nicht aktiviert. So müssen Sie zuerst die SetWindowTheme Funktion aufrufen, die Themen im Kalender zu deaktivieren, und dann können Sie die Farben zusammen mit den anderen vcl Stile entsprechen.

So etwas wie dieses

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; 

Und das Ergebnis wird sein, diese

enter image description here enter image description here

+0

OK Ich war mehr oder weniger auf dem gleichen. Aber dein ist wirklich klarer und schlauer! – philnext

Verwandte Themen