2013-01-04 84 views

回答

3

此行爲是作爲設計。該控件是Win32控件的一個包裝。查看MCM_SETCOLOR的文檔。在備註中你可以找到這個陳述。

如果視覺樣式處於活動狀態,除wParam爲MCSC_BACKGROUND以外,此消息不起作用。

我認爲,在Vista和更高版本,甚至試圖建立MCSC_BACKGROUND,相當於CalColors.BackColor,沒有任何效果。

如果您在應用程序中禁用視覺樣式,您確實可以看到應用了CalColors中指定的設置。

7

正如大衛說,TMonthCalendar internaly使用MCM_SETCOLOR消息設置控制的顏色,但在視覺樣式活躍此消息尚未影響。作爲解決方法,您可以使用SetWindowTheme函數僅禁用此控件上的視覺樣式。

試試這個示例:

uses 
    UxTheme; 

    SetWindowTheme(MonthCalendar1.Handle, '', ''); 
    MonthCalendar1.CalColors.MonthBackColor:=clWebKhaki; 
    MonthCalendar1.CalColors.TitleBackColor:=clWebDarkOrange; 

enter image description here

+2

要添加到這一點,你需要這樣的設置將被重新應用,如果窗口句柄調用'SetWindowTheme'在重寫'CreateWnd'被重新創建。 –