在CHOOSECOLOR对话框中更改字体

Rod*_*ddy 7 windows delphi colordialog common-controls

我正在使用Windows常用控件CHOOSECOLOR对话框,但在Win 7上,它像拇指一样伸出,因为它仍然使用"旧"Tahoma字体.

选择颜色对话框

是否有一种相当简单的方法来使用Segoe UI或其他字体?

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

And*_*and 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;
Run Code Online (Sandbox Code Playgroud)

这将使用Form1.Font字体.

自定义字体颜色对话框http://privat.rejbrand.se/ColorDialogWCustomFont.png

不过,在这种情况下,我可能会觉得它可以接受:

带默认字体的彩色对话框(Tahoma)http://privat.rejbrand.se/WCPDefTahoma.png 带Segoe UI字体的彩色对话框http://privat.rejbrand.se/WCPSegoeUI.png

Tahoma(默认)与Segoe UI

但!涉及的问题包括:

具有默认字体的颜色对话框 - 没有问题http://privat.rejbrand.se/WCLNoFontIssue.png

带有自定义字体的颜色对话框导致问题http://privat.rejbrand.se/WCLFontIssue.png

我认为,最安全的做法是不要改变对话框的默认(预期)外观.那么,至少,你可以责怪微软的任何扩展问题......