7

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

选择颜色对话框

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

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

4

1 回答 1

9

我认为更改默认字体不是一个好主意,但可以肯定的是:

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

但!涉及的问题有:

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

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

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

于 2011-05-26T20:20:08.510 回答