我正在使用Delphi 10.2 Tokyo和我安装了CEF4Delphi,因为我认为简单的TWebBrowser组件在性能和功能方面似乎有点下降。
我正在处理的项目是显示网页,而不需要显示任何URL地址。所以我只需要显示网页。
我发现了一些VCL应用程序演示,包括CEF4Delphi,那些正在使用另一个TChromiumWindow或类似的东西来显示网页。此外,Demos只有一个(AFAIK)FMX应用程序示例,其中Off Screen Rendering在TFMXBufferPanel中显示。
我尝试使用Demos创建表单,将URL和AddObject加载到主布局,但只显示演示项目中的橙色屏幕或显示“访问冲突”错误。我可能不知道如何正确阅读API文档,我无法找到它。
我从谷歌搜索与CEF4Delphi和FMX相关的所有内容,但这些都是过时的,从DCEF3或Delphi之前的FMX时代开始。如果没有解决方案,我即将放弃并使用VCL。
我的结论,
我可以使用CEF4Delphi从Firemonkey加载网页吗?只需要加载网页即可。
如果可以提出上述问题,我是否也可以拍摄屏幕快照并打印网页以获取其副本或保存为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.
答案 0 :(得分: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组件。您无法在创建组件后立即加载网址,但您可以设置TFMXChromium.DefaultUrl属性,以便在网址初始化后立即加载。