WebView2(TEdgeBrowser)更新了 Delphi 界面(例如:ICoreWebView2控制器2)

cxfofazt  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(570)

默认 的 Delphi 10.4.2 TEdgeBrowser 界面 目前 只有 原始 版本 的 WebView2 。 然而 , 似乎 要 在 非 白色 背景 上 实现 无 闪烁 加载 , 我们 需要 使用 ICoreWebView2Controller2 设置 背景 颜色 。 如何 访问( 以 向后 兼容 的 方式 ) ? 我 尝试 过 从 微软 更新 的 WebView2 nuget 包 中 导入 . tlb , 但是 Delphi 给出 了 一 个 OLE 错误 ,因此 我 无法 找到 一 种 方法 来 生成 具有 新 函数 的 DelphiWebView2 界面 。

aiazj4mn

aiazj4mn1#

要调用ICoreWebView2Controller2方法,必须首先声明接口,然后在运行时使用QueryInterface获取对该接口的引用,最后调用该方法。
这里后,我创建了一个小单位开始从微软头文件:

unit Ovb.WebView2;

interface

uses
    WebView2;

const
    IID_ICoreWebView2Controller2: TGUID = '{C979903E-D4CA-4228-92EB-47EE3FA96EAB}';

type
    COREWEBVIEW2_COLOR = packed record
        A : BYTE;
        R : BYTE;
        B : BYTE;
        G : BYTE;
    end;
    TCOREWEBVIEW2_COLOR = COREWEBVIEW2_COLOR;
    PCOREWEBVIEW2_COLOR = ^COREWEBVIEW2_COLOR;

  ICoreWebView2Controller2 = interface(ICoreWebView2Controller)
      ['{C979903E-D4CA-4228-92EB-47EE3FA96EAB}']
      function get_DefaultBackgroundColor(backgroundColor : PCOREWEBVIEW2_COLOR) : HRESULT; stdcall;
      function put_DefaultBackgroundColor(backgroundColor : TCOREWEBVIEW2_COLOR) : HRESULT; stdcall;
  end;

implementation

end.

您可以使用它来举例如下:

procedure TEdgeViewForm.EdgeBrowser1CreateWebViewCompleted(
    Sender  : TCustomEdgeBrowser;
    AResult : HRESULT);
var
    Ctrl2     : ICoreWebView2Controller2;
    BackColor : TCOREWEBVIEW2_COLOR;
    HR        : HRESULT;
begin
    Sender.ControllerInterface.QueryInterface(IID_ICoreWebView2Controller2, Ctrl2);
    if not Assigned(Ctrl2) then
        raise Exception.Create('ICoreWebView2Controller2 not found');
    // Select red background
    BackColor.A := 255;
    BackColor.R := 255;
    BackColor.G := 0;
    BackColor.B := 0;
    HR := Ctrl2.put_DefaultBackgroundColor(BackColor);
    if not SUCCEEDED(HR) then
        raise Exception.Create('put_DefaultBackgroundColor failed');
end;

我已经用Embarcadero EdgeView演示测试了我的代码。红色背景是可见的,所以我认为我的代码是正确的。

fruv7luv

fruv7luv2#

要获得最新的接口而不是 Delphi 捆绑,请按照以下步骤操作:
1.下载最新的Microsoft.Web.WebView2软件包。

  1. Nuget文件是一个zip压缩包,从其中解压缩WebView2.tlb
    1.运行"C:\Program Files (x86)\Embarcadero\Studio\{Ver}\bin\tlibimp.exe" -P WebView2.tlb
    如果{Ver}是您的RAD Studio版本。
    它将创建包含可用接口的WebView2_TLB.pas文件
    1.将TLB单元链接到您项目中需要它的地方
    示例代码用法:
var 
  WebView: ICoreWebView2_7;
  Controller: ICoreWebView2Controller3;
begin
  // May cast directly if you are sure WebView2 runtime supports it
  WebView := ICoreWebView2_7(Browser.DefaultInterface);
  // Or can check if the interface is available
  if Browser.DefaultInterface.QueryInterface(ICoreWebView2_7, WebView) = S_OK then
  // The same for WebView Controller:
  Controller := ICoreWebView2Controller3(Browser.ControllerInterface);
  // or using QueryInterface:
  if Browser.ControllerInterface.QueryInterface(ICoreWebView2Controller3, Controller) = S_OK then
  // Environment interface is accessile through
  // Browser.EnvironmentInterface

相关问题