2012-04-10 44 views
3

TMontCalendarはWindowsラッパーのようですので、新しいVCLスタイルの影響を受けることはありません。TMonthCalendarとDelphiスタイル(Delphi XE2)

+3

について[VCL-スタイル-と、所有者になります - ドロー](http://theroadtodelphi.wordpress.com/2012/03/14/vcl-styles-and-owner-draw/)。特に[TStyleHook](http://docwiki.embarcadero.com/Libraries/en/Vcl.Themes.TStyleHook)。 –

+1

ここに、VCLスタイルを使用するためにTWebBrowserをハッキングした人がいます: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

TMonthCalendarMONTHCAL_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; 

そして結果のような

何かがこのRRUZはあなたに解決策を与えてまで読みたいかもしれません

enter image description here enter image description here

+0

私は多かれ少なかれ同じでした。しかし、あなたのは本当により明確でスマートです! – philnext

関連する問題