Delphi中不弹出页面设置对话框,如何控制页面设置选项?
通过代码修改Delphi中TWebBrowser的页面设置(无需弹窗)
可以通过修改注册表项实现自定义页面设置(包括页眉、页脚),因为TWebBrowser的打印配置继承自IE的全局用户设置,直接修改对应注册表键值就能跳过对话框,强制统一所有用户的打印格式。
关键注册表路径
根据系统和程序位数,选择对应的注册表路径:
- 32位系统/32位程序:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup - 64位系统上的32位程序:
HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Internet Explorer\PageSetup - 64位系统上的64位程序:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup
核心键值说明
header:页眉内容,支持特殊变量:&w(窗口标题)、&u(页面URL)、&d(日期)、&t(时间)、&p(当前页码)、&P(总页码);设为空字符串可清空页眉。footer:页脚内容,变量规则同页眉;自定义格式示例:第 &p 页,共 &P 页。
Delphi代码实现
设置自定义页面设置
uses Registry; procedure SetCustomPageSetup; var Reg: TRegistry; RegPath: string; begin Reg := TRegistry.Create; try // 确定注册表路径 if Win64 and not (Pos('Win32', ParamStr(0)) > 0) then RegPath := 'Software\Microsoft\Internet Explorer\PageSetup' else RegPath := 'Software\Wow6432Node\Microsoft\Internet Explorer\PageSetup'; Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey(RegPath, True) then begin // 清空页眉 Reg.WriteString('header', ''); // 设置自定义页脚 Reg.WriteString('footer', '第 &p 页,共 &P 页'); // 可选:修改页边距(单位:英寸) // Reg.WriteString('margin_bottom', '0.75'); // Reg.WriteString('margin_top', '0.75'); Reg.CloseKey; end; finally Reg.Free; end; end;
临时修改并恢复原有设置(避免影响全局)
如果不想修改用户的全局IE设置,可以在程序启动时备份原有配置,退出时恢复:
var SavedHeader, SavedFooter: string; // 备份原有设置 procedure BackupOriginalPageSetup; var Reg: TRegistry; RegPath: string; begin Reg := TRegistry.Create; try if Win64 and not (Pos('Win32', ParamStr(0)) > 0) then RegPath := 'Software\Microsoft\Internet Explorer\PageSetup' else RegPath := 'Software\Wow6432Node\Microsoft\Internet Explorer\PageSetup'; Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey(RegPath, False) then begin SavedHeader := Reg.ReadString('header'); SavedFooter := Reg.ReadString('footer'); Reg.CloseKey; end; finally Reg.Free; end; end; // 恢复原有设置 procedure RestoreOriginalPageSetup; var Reg: TRegistry; RegPath: string; begin Reg := TRegistry.Create; try if Win64 and not (Pos('Win32', ParamStr(0)) > 0) then RegPath := 'Software\Microsoft\Internet Explorer\PageSetup' else RegPath := 'Software\Wow6432Node\Microsoft\Internet Explorer\PageSetup'; Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey(RegPath, True) then begin Reg.WriteString('header', SavedHeader); Reg.WriteString('footer', SavedFooter); Reg.CloseKey; end; finally Reg.Free; end; end;
使用方式
- 程序启动时调用
BackupOriginalPageSetup备份用户原有设置。 - 在打印前调用
SetCustomPageSetup应用自定义配置。 - 调用无弹窗打印命令:
WebHTML.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER); - 程序退出时调用
RestoreOriginalPageSetup恢复用户原有设置。
内容的提问来源于stack exchange,提问作者Kyle Williamson
相关产品推荐
相关产品推荐

