【问题标题】:Using CEF4Delphi to show web page from firemonkey使用 CEF4Delphi 从 firemonkey 显示网页
【发布时间】:2018-04-13 03:23:04
【问题描述】:

我使用的是 Delphi 10.2 Tokyo,我安装了 CEF4Delphi,因为我认为普通的 TWebBrowser 组件在性能和功能方面似乎有些下降。

我正在做的项目是显示网页,不需要显示任何 URL 地址。所以我只需要显示网页。

我发现了一些 VCL 应用程序演示,包括 CEF4Delphi,它们使用另一个 TChromiumWindow 或类似的东西来显示网页。而且演示中只有一个(AFAIK)FMX 应用示例,带有离屏渲染以显示在 TFMXBufferPanel 中。

我尝试了从 Demos 创建表单、加载 URL 和 AddObject 到主布局的确切方法,但只显示来自演示项目的橙色屏幕,或者显示访问冲突错误。我可能不知道如何正确阅读 API 文档,我找不到它。

我从谷歌搜索所有与 CEF4Delphi 和 FMX 相关的东西,但那些已经过时了,从 DCEF3 或 FMX 之前的 Delphi 时代开始。如果没有解决方案,我即将放弃并使用VCL。

我的结论,

  1. 我可以使用 CEF4Delphi 从 Firemonkey 加载网页吗?只需要加载网页。

  2. 如果上述问题是可能的,我是否也可以拍摄屏幕快照并打印网页以获取其副本或保存为 pdf?我认为这些都可以用一两行源代码完成。

我会发布我尝试过的作品。为一些注释代码道歉,我的老板尝试了。

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
  FMX.Controls.Presentation, FMX.StdCtrls, uFMXExternalPumpBrowser;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Layout1: TLayout;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  f: TFMXExternalPumpBrowserFrm;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Layout1.AddObject(f.Panel1);
end;

procedure TForm1.Button2Click(Sender: TObject);
//var
//  MainFrame: ICefFrame;
begin

f.Show;
  f.LoadURL('naver.com');
//  f.Panel1.InvalidatePanel;
//
//  f.chrmosr.Browser.MainFrame.LoadUrl('naver.com');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  f := TFMXExternalPumpBrowserFrm.Create(nil);
end;

end.

这是程序执行代码。

program fmxwebtes;

uses
  System.StartUpCopy,
  FMX.Forms,
  WinApi.Windows,
  uCEFApplication,
  Unit1 in 'Unit1.pas' {Form1},
  uFMXApplicationService in 'uFMXApplicationService.pas',
  uFMXExternalPumpBrowser in 'uFMXExternalPumpBrowser.pas' {FMXExternalPumpBrowserFrm};

{$R *.res}

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
begin

GlobalCEFApp := TCefApplication.Create;

  if GlobalCEFApp.StartMainProcess then
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end;

  GlobalCEFApp.Free;
end.

【问题讨论】:

    标签: firemonkey chromium-embedded delphi cef4delphi


    【解决方案1】:

    是的。您可以使用 FMX 组件使用 CEF4Delphi 加载、拍摄快照和打印网页,但该演示使用离屏渲染模式 (OSR) 和外部消息泵,这意味着它是 CEF4Delphi 中最复杂的演示之一。

    要加载网页,请使用 TFMXChromium.LoadURL。 要打印,请使用 TFMXChromium.Print 或 TFMXChromium.PrintToPDF。 要拍摄快照,请使用 TFMXBufferPanel.SaveToFile 或复制 TFMXBufferPanel.Buffer 属性中的位图。

    如果您使用 VCL 组件,将浏览器添加到您的应用程序会容易得多。

    编辑:您的 DPR 缺少使 FMX 组件工作所需的几个属性。查看 FMXExternalPumpBrowser 演示中的 DPR 文件,您会发现您需要创建工作调度程序并设置这些 GlobalCEFApp 属性。 GlobalCEFApp_OnScheduleMessagePumpWork 过程在 uFMXExternalPumpBrowser.pas 中定义

    GlobalFMXWorkScheduler := TFMXWorkScheduler.Create(nil);
    
    GlobalCEFApp                            := TCefApplication.Create;
    GlobalCEFApp.WindowlessRenderingEnabled := True;
    GlobalCEFApp.EnableHighDPISupport       := True;
    GlobalCEFApp.FlashEnabled               := False;
    GlobalCEFApp.ExternalMessagePump        := True;
    GlobalCEFApp.MultiThreadedMessageLoop   := False;
    GlobalCEFApp.OnScheduleMessagePumpWork  := GlobalCEFApp_OnScheduleMessagePumpWork;
    

    编辑 2:所有 CEF 组件都需要在加载网站之前进行初始化。您无法在创建组件后立即加载 URL,但您可以设置 TFMXChromium.DefaultUrl 属性以在初始化后立即加载您的 URL。

    【讨论】:

    • 这是我第一次得到开源开发者的评论。谢谢先生,但我仍然无法加载网址。我做了一些调试过程,发现 LoadURL 值的 Initialized 属性为 False,导致退出 LoadURL if 语句。有没有可能我安装“不正确”?我安装了普通的 CEF4Delphi,我意识到我必须安装 FMX 版本才能从 FMX 平台使用它。所以我只是卸载它并再次安装 FMX 版本。 FMX 版本没有 ChromiumWindow 组件吗?
    • TChromiumWindow 只是一个 VCL 组件。我将尝试添加另一个不使用离屏渲染模式的 FMX 演示。
    • 我刚刚添加了一个新的 FMX 演示。请再次下载 CEF4Delphi 并尝试“SimpleFMXBrowser”演示。阅读代码 cmets。
    • 在我更新我的 Chromium 二进制文件后效果很好。非常感谢,祝您有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2018-04-19
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多