如何在TDateTimePicker上创建Back Color功能。我只想设置控件的背景颜色。
答案 0 :(得分: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;
请注意,我们还需要在日期/时间选择器的子月份日历控件上禁用主题。那是因为日历是使用与主控件分开的窗口绘制的。
您可以选择不禁用主控件的主题,在这种情况下控件如下所示:
但我觉得这看起来有点奇怪。
@RRUZ就日期时间选择器的VCL样式密切相关的主题写了一个很好的答案:Style properties for TDateTimePicker
答案 1 :(得分:0)
使用Win32 API SendMessage()函数或TDateTimePicker自己的Perform()
方法向DTP发送DTM_SETMCCOLOR消息。
答案 2 :(得分:0)
您可以使用SendMessage()来禁用Windows主题
uses
Winapi.CommCtrl,Vcl.Styles,Vcl.Themes,uxTheme;
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
var hwnd: WinAPI.Windows.HWND;
begin
hwnd:=SendMessage(TDateTimePicker(Sender).Handle,DTM_GETMONTHCAL,0,0);
uxTheme.setWindowTheme(hwnd,'','');
end;
在CalColors工作之后