TEdgeBrowser有replaced the TWebBrowser个.有没有办法使用TEdgeBrowser进行模式对话框打印?我try 使用以下代码运行Java脚本以显示Edge Browser Print(边缘浏览器打印)对话框:

EdgeBrowser.ExecuteScript('window.print();');

浏览器闪烁了一秒钟,但没有显示打印对话框.TEdgeBrower在我的应用程序中也很小,所以如果可能的话,我希望有一个模式打印对话框.

如果我使用组合键CTRL+SHIFT+P,,打印对话框会显示...但仅在小的TEdgeBrowser窗口内显示.

推荐答案

Edge WebView control中控制打印的功能是only added within the last months(您需要至少安装版本109.0.1518.46的Edge和Microsoft Edge Runtime),所以Delphi中的标准TEdgeBrowser组件还不知道这一点.

有一个新的方法ShowPrintUI(),您可以使用它来专门打开打印对话框的操作系统版本,它是模式的,并显示在实际浏览器控件的边界之外.

您可以按照WebView2 (TEdgeBrowser) updated Delphi interface (e.g. ICoreWebView2Controller2)087">Marcodor's answerat WebView2 (TEdgeBrowser) updated Delphi interface (e.g. ICoreWebView2Controller2)中的步骤使用Delphi TEdgeBrowser中的新方法.

使用来自微软的当前WebView2包,结果文件WebView2_TLB.pas将包含ICoreWebView2_16接口定义,该ICoreWebView2_16接口定义尤其包含ShowPrintUI()方法的定义.

然后,您可以将WebView2_TLB.pas单位包含到您的项目中,并使用以下代码显示系统打印对话框:

var
  WebView: ICoreWebView2_16;
begin
  // Test if browser supports ICoreWebView2_16 interface
  if EdgeBrowser1.DefaultInterface.QueryInterface(ICoreWebView2_16, WebView) = S_OK then
  begin
    // If yes, show system print dialog
    WebView.ShowPrintUI(COREWEBVIEW2_PRINT_DIALOG_KIND_SYSTEM);
  end
  else
  begin
    // Not yet supported, possible fallback?
  end;
end;

ICoreWebView2_16界面还包含将浏览器内容直接打印到PDF或预先 Select 的打印机而不向用户显示对话框的方法.

Javascript相关问答推荐

Webpack将懒惰加载的模块放入主块中

文件阅读器未读取一个文件

如何使用JavaScript对切换的声音设置音量

字节数组通过echo框架传输到JS blob

docx.js:如何在客户端使用文档修补程序

Mongoose post hook在使用await保存时不返回Postman响应

Prisma具有至少一个值的多对多关系

Websocket错误—有一个或多个保留位开启:reserved1 = 1,reserved2 = 0,reserved3 = 0

使用POST请求时,Req.Body为空

使用带有HostBinding的Angular 信号来更新样式?

以编程方式聚焦的链接将被聚焦,但样式不适用

回溯替代方式

删除元素属性或样式属性的首选方法

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

React:防止useContext重新渲染整个应用程序或在组件之间共享数据而不重新渲染所有组件

通过跳过某些元素的对象进行映射

Django导入问题,无法导入我的应用程序,但我已在设置中安装了它

不协调嵌入图片

如何使用[ModelJSON,ArrayBuffer]调用tf.loadGraphModelSync