3

TMontCalendar は Windows ラッパーのようで、新しい VCL スタイルの影響を受けません。解決策をご存知ですか?

4

1 に答える 1

6

MONTHCAL_CLASSTMonthCalendarラッパーであり、私が知る限り、このコントロールは所有者の描画をサポートしていませんが、カレンダーの要素の色を設定できるプロパティを提供しますが、このプロパティはテーマが有効になっていない場合にのみ機能します。そのため、最初にSetWindowTheme関数を呼び出してカレンダーのテーマを無効にする必要があります。次に、vcl スタイルと一致するように色を設定できます。CalColors

このようなもの

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;

で、結果はこうなります

ここに画像の説明を入力 ここに画像の説明を入力

于 2012-04-10T15:21:25.383 に答える