在 CHOOSECOLOR 对话框中更改字体

发布于 2024-11-09 15:56:49 字数 352 浏览 0 评论 0原文

我正在使用 Windows 通用控件 CHOOSECOLOR 对话框,但在 Win 7 上,它像拇指酸痛一样突出,因为它仍然使用“旧”Tahoma 字体。

ChooseColor Dialog

有没有一种相当简单的方法让它使用 Segoe UI 或其他字体?

如果重要的话,我正在使用 Delphi/C++Builder...

I'm using the Windows common controls CHOOSECOLOR dialog, but on Win 7 it sticks out like a sore thumb as it still uses the 'old' Tahoma font.

ChooseColor Dialog

Is there a fairly easy way of getting it to use Segoe UI or some other font?

If it matters, I'm using Delphi/C++Builder...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

燕归巢 2024-11-16 15:56:49

我认为更改默认字体不是一个好主意,但当然,这是可行的:

function EnumChildProc(hWnd: HWND; lParam: LPARAM): LongBool; stdcall;
begin
  SendMessage(hWnd, WM_SETFONT, lParam, Integer(true));
  result := true;
end;

procedure TForm1.ColorDialogShow(Sender: TObject);
var
  dlg: TColorDialog;
begin
  if not (Sender is TColorDialog) then Exit;
  dlg := TColorDialog(Sender);

  SendMessage(dlg.Handle, WM_SETFONT, Self.Font.Handle, Integer(true));

  EnumChildWindows(dlg.Handle, @EnumChildProc, Self.Font.Handle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TColorDialog.Create(nil) do
    try
      OnShow := ColorDialogShow;
      Execute(Handle);
    finally
      Free;
    end;
end;

这将使用 Form1.Font 字体。

带有自定义字体的颜色对话框

尽管如此,在这种情况下,我可能会觉得它可以接受:

默认字体的颜色对话框 (Tahoma) 带有 Segoe UI 字体的颜色对话框

Tahoma(默认)与 Segoe UI

但是! 涉及以下问题:

带有默认字体的颜色对话框 - 没有问题

带有自定义字体的颜色对话框会导致问题

我认为,最安全的做法是不要更改默认(预期的)外观对话。那么,至少,你可以将任何扩展问题归咎于微软......

I don't think it is a good idea to alter the default font, but sure, it's doable:

function EnumChildProc(hWnd: HWND; lParam: LPARAM): LongBool; stdcall;
begin
  SendMessage(hWnd, WM_SETFONT, lParam, Integer(true));
  result := true;
end;

procedure TForm1.ColorDialogShow(Sender: TObject);
var
  dlg: TColorDialog;
begin
  if not (Sender is TColorDialog) then Exit;
  dlg := TColorDialog(Sender);

  SendMessage(dlg.Handle, WM_SETFONT, Self.Font.Handle, Integer(true));

  EnumChildWindows(dlg.Handle, @EnumChildProc, Self.Font.Handle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TColorDialog.Create(nil) do
    try
      OnShow := ColorDialogShow;
      Execute(Handle);
    finally
      Free;
    end;
end;

This will use the Form1.Font font.

Color Dialog with custom font

Still, in this case, I might just find it acceptable:

Color Dialog with default font (Tahoma) Color Dialog with Segoe UI font

Tahoma (Default) vs. Segoe UI

But! There are issues involved:

Color Dialog with default font - no issues

Color Dialog with custom font causing issues

The safest thing to do, I think, is not to alter the default (intended) appearance of the dialog. Then, at least, you can blame Microsoft for any scaling issues...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文