【问题标题】:Set Back Color On DateTime Picker在日期时间选择器上设置背景颜色
【发布时间】:2014-01-13 14:02:19
【问题描述】:

如何使背景颜色功能在 TDateTimePicker 上工作。我只想设置控件的背景颜色。

【问题讨论】:

    标签: delphi vcl delphi-xe3


    【解决方案1】:

    日期时间选择器控件在主题应用程序中显示时,具有由主题确定的颜色。您无法控制主题涂料使用的颜色。

    您可以使用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

    【讨论】:

      【解决方案2】:

      使用 Win32 API SendMessage() 函数或 TDateTimePicker 自己的 Perform() 方法向 DTP 发送 DTM_SETMCCOLOR 消息。

      【讨论】:

        【解决方案3】:

        您可以使用 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 之后它起作用了

        结果图片

        Link Youtube Vidéo

        【讨论】:

          猜你喜欢
          • 2015-08-28
          • 2017-04-05
          • 1970-01-01
          • 2021-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-12
          相关资源
          最近更新 更多