Изменение шрифта в диалоге CHOOSECOLOR - PullRequest
7 голосов
/ 26 мая 2011

Я использую диалог общих элементов управления Windows CHOOSECOLOR , но в Win 7 он торчит, как больной большой палец, поскольку он все еще использует «старый» шрифт Tahoma.

ChooseColor Dialog

Есть ли довольно простой способ заставить его использовать пользовательский интерфейс Segoe или какой-либо другой шрифт?

Если это имеет значение, я использую Delphi / C ++ Builder ...

1 Ответ

9 голосов
/ 27 мая 2011

Не думаю, что это хорошая идея изменить шрифт по умолчанию, но, конечно, это выполнимо:

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.

Цветовой диалог с пользовательским шрифтом http://privat.rejbrand.se/ColorDialogWCustomFont.png

Тем не менее, в этом случае я мог бы просто найти это приемлемым:

Цветовой диалог со шрифтом по умолчанию (Tahoma) http://privat.rejbrand.se/WCPDefTahoma.png Цветной диалог со шрифтом Segoe UI http://privat.rejbrand.se/WCPSegoeUI.png

Tahoma (по умолчанию) и пользовательский интерфейс Segoe

Но! Есть проблемы:

Цветовой диалог со шрифтом по умолчанию - без проблем http://privat.rejbrand.se/WCLNoFontIssue.png

Цветовой диалог с нестандартным шрифтом, вызывающим проблемы http://privat.rejbrand.se/WCLFontIssue.png

Самое безопасное, что я думаю сделать, это не изменять внешний вид диалогового окна по умолчанию. Тогда, по крайней мере, вы можете обвинить Microsoft в любых проблемах масштабирования ...

...