首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CEF4Delphi显示防火墙的网页

使用CEF4Delphi显示防火墙的网页
EN

Stack Overflow用户
提问于 2018-04-13 03:23:04
回答 1查看 1.8K关注 0票数 0

我使用Delphi10.2东京,并安装了CEF4Delphi,因为我认为普通的TWebBrowser组件在性能和功能方面似乎有些下降。

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

我发现了一些,包括CEF4Delphi,它们使用的是另一个TChromiumWindow或类似于显示网页的东西。此外,该演示只有一个(AFAIK) FMX应用程序的例子与屏幕外呈现显示在TFMXBufferPanel。

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

我从谷歌搜索所有与CEF4Delphi和FMX相关的东西,但这些都过时了,它们来自DCEF3或FMX之前的德尔菲时代。如果没有解决方案,我将放弃使用VCL。

我的结论,

  1. 我可以使用CEF4Delphi从火猴加载网页吗?唯一需要做的就是加载网页。
  2. 如果上述问题是可能的,我是否也可以拍摄屏幕快照和打印网页,以获得它的副本或保存到pdf?我认为这可以用一两行源代码来完成。

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

代码语言:javascript
复制
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.

这是用来执行程序代码的。

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 06:57:32

是。您可以使用FMX组件加载、获取快照和使用CEF4Delphi打印网页,但演示使用的是屏幕外呈现模式和外部消息泵,这意味着它是CEF4Delphi中最复杂的演示之一。

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

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

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

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49808829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档