delphi TEdgeBrowser模态打印对话框?

iaqfqrcu  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(198)

TEdgeBrowser有replaced the TWebBrowser。有没有一种方法可以使用TEdgeBrowser进行模态对话框打印?我尝试运行JavaScript来显示Edge Browser打印对话框,使用以下代码:

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

浏览器 Flink 一秒钟,但没有显示打印对话框。TEdgeBrower在我的应用程序中也非常小,所以如果可能的话,我希望有一个模态打印对话框。
如果我使用组合键CTRL +P,打印对话框显示.但仅在小的TEdgeBrowser窗口内示出。

0s0u357o

0s0u357o1#

Edge WebView control中控制打印的功能是最近几个月才添加的(您需要至少安装109.0.1518.46版本的Edge和微软Edge的Edge),因此 Delphi 中的标准TEdgeBrowser组件还不知道它。
有一个新的方法ShowPrintUI(),您可以使用它来专门打开打印对话框的操作系统版本,该对话框是模态的,并且显示在实际浏览器控件的边界之外。
您可以按照WebView2 (TEdgeBrowser) updated Delphi interface (e.g. ICoreWebView2Controller2)Marcodor's answer中的步骤在 Delphi TEdgeBrowser中使用新方法。
使用Microsoft当前的WebView2包,结果文件WebView2_TLB.pas将包含一个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或预先选择的打印机的方法,而无需向用户显示对话框。

相关问题