You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Delphi TDateTimePicker控件的日历字体大小?

调整Delphi TDateTimePicker弹出日历的字体大小

TDateTimePicker的Font属性仅作用于编辑区域,弹出的日历控件属于系统底层的SysMonthCal32窗口,需要通过Windows API捕获并修改它的字体。具体步骤如下:

1. 捕获日历弹出事件

当TDateTimePicker弹出日历时,会向父窗口发送DTN_DROPDOWN通知,我们可以通过处理WM_NOTIFY消息来捕获这个时机。

2. 获取日历控件句柄

使用DateTime_GetMonthCal API(需引用CommCtrl单元)获取弹出日历的窗口句柄,这个API专门用于从TDateTimePicker获取其关联的月历控件句柄。

3. 设置日历字体

创建目标字体,通过WM_SETFONT消息将字体应用到日历控件上。

完整代码示例

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Winapi.CommCtrl;

type
  TForm1 = class(TForm)
    DateTimePicker1: TDateTimePicker;
  private
    procedure WMNNotify(var Msg: TWMNotify); message WM_NOTIFY;
  public
    { Public declarations }
  end;

const
  DTN_FIRST = $FFFFFD00;
  DTN_DROPDOWN = DTN_FIRST + 0;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMNNotify(var Msg: TWMNotify);
var
  CalHandle: HWND;
  NewFont: HFONT;
begin
  // 检查是否是目标DateTimePicker的日历弹出通知
  if (Msg.NMHdr.code = DTN_DROPDOWN) and (Msg.NMHdr.hwndFrom = DateTimePicker1.Handle) then
  begin
    // 获取弹出日历的句柄
    CalHandle := DateTime_GetMonthCal(DateTimePicker1.Handle);
    if CalHandle <> 0 then
    begin
      // 创建12px的字体(高度为负数表示像素单位)
      NewFont := CreateFont(
        -12, 0, 0, 0, FW_NORMAL, False, False, False,
        DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
        DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, '微软雅黑'
      );
      // 给日历控件设置字体并立即重绘
      SendMessage(CalHandle, WM_SETFONT, WPARAM(NewFont), 1);
    end;
  end;
  inherited;
end;

end.

关键说明

  • 确保引用Winapi.CommCtrl单元,否则DateTime_GetMonthCal无法识别
  • CreateFont的高度参数使用负数,代表以像素为单位设置字体大小(-12对应12px)
  • 字体名称可根据需求修改,比如替换为'宋体'等系统字体
  • 不需要手动释放创建的字体,日历控件会自动管理其生命周期

内容的提问来源于stack exchange,提问作者gene b.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:57:31