如何改变TDateTimePicker的颜色?

时间:2014-09-11 15:43:24

标签: delphi delphi-xe6

如何更改TDateTimePicker的颜色?

日期和时间选择器可以有颜色:

enter image description here

通常可以通过设置颜色

来完成
procedure TForm1.FormCreate(Sender: TObject);
begin
   DateTimePicker1.Color := clLime;
end;

但是当使用Date and Time Picker Control的第6版时,颜色不再有效:

enter image description here

我尝试使用SetWindowTheme来停用TDateTimePicker的样式:

procedure TForm1.FormCreate(Sender: TObject);
begin
   UxTheme.SetWindowTheme(DateTimePicker1.Handle, '', '');
   DateTimePicker1.Color := clLime;
end;

但这让它很生气:

enter image description here

如何更改 DateTimePicker 的颜色?

我打算接受修补VCL:

procedure TDateTimePicker.CreateWnd;
var
  LChecked: Boolean;
begin
  LChecked := FChecked;
  inherited CreateWnd;
  SetChecked(LChecked);
  if Length(FFormat) > 0 then
     DateTime_SetFormat(Handle, FFormat);

  //20140911 Fix the .Color property not working
  if Self.HandleAllocated then
     Winapi.UxTheme.SetWindowTheme(Self.Handle, '', '');
end;

但禁用窗口的主题并不能做到。

Bonus Chatter

您可以使用仍然适用的主题样式更改版本6 TComboBox的颜色:

enter image description here

因此,它不是常见控件版本6或视觉样式的基本限制。

重复?

我想不是。

  • 该问题涉及如何使DateTime选择器荣耀活跃的Delphi风格
  • 这个问题涉及热门使得日期时间选择器尊重活跃的德尔福风格

这些问题的答案不会让你改变颜色;这就是我需要做的事情。

建议这些答案适用更加荒谬,因为如果您使用非标准(Delphi)风格,Style Hooks只会做任何事情。

2 个答案:

答案 0 :(得分:2)

  

如何更改TDateTimePicker的颜色?

对于v6 comctl32,你不能。

  

因此,它不是常见控件版本6或视觉样式的基本限制。

嗯,是的。是的,v6 comctl32允许用户为组合框指定颜色。但不是约会时间选择器吗?

为了获得您想要的结果,您需要通过禁用控件的主题并处理WM_ERASEBKGNDWM_PAINT来控制控件的绘制。罗德里戈在这里演示:Style properties for TDateTimePicker。说实话,这并不是一大堆乐趣。你需要绘制整个控件。

这是您需要习惯v6 comctl32的东西。它真的想要掌控控件的主题和风格。如果你想改变那个,那么你的自由远远少于过去的自由。

答案 1 :(得分:0)

使用JVCL库中的TJvDatePickerEdit。它可以显示定义的背景颜色,即使您正在使用主题。