2014-01-13 58 views

回答

0

使用Win32 API SendMessage()函數或TDateTimePicker自己的Perform()方法來發送DTP DTM_SETMCCOLOR消息。

2

日期時間選取器控件在主題應用程序中顯示時具有由主題確定的顏色。您無法控制主題塗料使用的顏色。

您可以使用SetWindowTheme禁用控件的主題,並實現你想要的。下面是使用的插入類的例子:

type 
    TDateTimePicker = class(Vcl.ComCtrls.TDateTimePicker) 
    protected 
    procedure CreateWnd; override; 
    procedure CNNotify(var Message: TWMNotifyDT); message CN_NOTIFY; 
    end; 

procedure TDateTimePicker.CreateWnd; 
begin 
    inherited; 
    SetWindowTheme(WindowHandle, '', ''); 
    CalColors.BackColor := clFuchsia; 
    CalColors.MonthBackColor := clFuchsia; 
    CalColors.TitleBackColor := clFuchsia; 
end; 

procedure TDateTimePicker.CNNotify(var Message: TWMNotifyDT); 
var 
    DropDownHandle: HWND; 
begin 
    inherited; 
    case Message.NMHdr.code of 
    DTN_DROPDOWN: 
    begin 
     DropDownHandle := Perform(DTM_GETMONTHCAL, 0, 0); 
     SetWindowTheme(DropDownHandle, '', ''); 
    end; 
    end; 
end; 

enter image description here

請注意,我們還需要禁用上的日期/時間選擇器的子月曆控件主題。這是因爲日曆是使用與主控件分離的窗口繪製的。

你可以選擇不要禁用主題的主控制,在這種情況下,控制是這樣的:

enter image description here

但我覺得看起來有點古怪。

@RRUZ在日期時間選擇器的VCL樣式的密切關聯的主題上寫了一個很好的答案:Style properties for TDateTimePicker