You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过TEdgeBrowser实现模态打印对话框?遇脚本执行无弹窗问题

TEdgeBrowser 实现模态打印对话框的解决方案

1. 解决window.print()无弹窗的问题

直接调用window.print()失效,通常是因为TEdgeBrowser的脚本执行上下文限制或打印权限未开启。更可靠的方式是使用组件原生的Print方法:

EdgeBrowser.Print(True); // 参数True表示显示打印对话框

调用前需确保页面已完全加载(可在OnDocumentCompleted事件中触发),同时检查组件核心设置:

  • 确认EdgeBrowser.CoreWebView2.Settings.IsScriptEnabled = True
  • 确认EdgeBrowser.CoreWebView2.Settings.IsPrintingEnabled = True

2. 实现独立模态打印对话框(脱离小窗口限制)

默认打印对话框会依附于TEdgeBrowser的小窗口,可通过Windows API调整对话框的父窗口,使其成为应用主窗口的模态对话框:

procedure TForm1.btnPrintClick(Sender: TObject);
var
  hPrintDialog: HWND;
begin
  // 触发打印对话框
  EdgeBrowser.Print(True);
  
  // 等待对话框加载(根据实际情况调整延迟)
  Sleep(300);
  
  // 查找打印对话框窗口(中文系统标题为"打印",英文系统改为"Print")
  hPrintDialog := FindWindow(nil, '打印');
  if hPrintDialog <> 0 then
  begin
    // 将对话框父窗口设置为应用主窗口
    SetParent(hPrintDialog, Self.Handle);
    // 居中显示在主窗口
    CenterWindow(hPrintDialog);
    // 锁定主窗口,实现模态效果
    EnableWindow(Self.Handle, False);
    // 等待对话框关闭
    while IsWindow(hPrintDialog) do
    begin
      Application.ProcessMessages;
    end;
    EnableWindow(Self.Handle, True);
  end;
end;

多语言适配:可通过窗口类名查找(Edge打印对话框类名为Chrome_WidgetWin_1),避免标题差异问题:

hPrintDialog := FindWindow('Chrome_WidgetWin_1', nil);

3. 替代方案:生成PDF后调用系统打印对话框

如果上述方法仍有问题,可先将页面导出为PDF,再调用系统原生打印对话框(天然模态且独立):

procedure TForm1.btnPrintToPdfClick(Sender: TObject);
var
  PdfPath: string;
begin
  PdfPath := TPath.Combine(TPath.GetTempPath, 'temp_print.pdf');
  // 异步生成PDF
  EdgeBrowser.CoreWebView2.PrintToPdfAsync(
    PdfPath,
    nil,
    procedure(Succeeded: Boolean; const PdfPath: string)
    begin
      if Succeeded then
      begin
        // 调用系统打印对话框打印PDF
        ShellExecute(0, 'print', PChar(PdfPath), nil, nil, SW_HIDE);
        // 打印完成后删除临时PDF
        TThread.Synchronize(nil, procedure
        begin
          DeleteFile(PdfPath);
        end);
      end;
    end);
end;

内容的提问来源于stack exchange,提问作者Kyle Williamson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:41:12