Delphi7 字体对话框在 Windows 7 上已过时

Delphi7 Font dialog outdated on Windows 7

如何使我的 dlg 现代? (如何给Delphi7打补丁)

对于 Windows 7 及更高版本,要显示的新对话框的违规部分是回调。这是来自“Font Dialog Box”的引述:

If you enable a hook procedure without creating a custom template, the default ChooseFont template for earlier Windows versions will be loaded.

您可以通过修改 "dialogs.pas" 的副本并将其放入当前项目的源文件夹中来消除挂钩过程。

function TFontDialog.Execute: Boolean;
  ...
//    Flags := Devices[FDevice] or (CF_INITTOLOGFONTSTRUCT or CF_ENABLEHOOK);
    Flags := Devices[FDevice] or CF_INITTOLOGFONTSTRUCT;
  ...
//    hWndOwner := Application.Handle;
    hWndOwner := GetActiveWindow;
  ...

后面的修改是为了在合理的地方显示对话框。一旦挂钩程序被禁用,VCL 将无法使对话框居中。您还将失去 "Apply" 按钮功能和其他事件 (OnShow/Close)。