Delphi7 字体对话框在 Windows 7 上已过时
Delphi7 Font dialog outdated on Windows 7
- 左-现代应用Win7对话框
- 右-我的Delphi7应用的Win7对话框
如何使我的 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)。
- 左-现代应用Win7对话框
- 右-我的Delphi7应用的Win7对话框
如何使我的 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)。