我正在使用 Delphi 10.2 Tokyo 并安装了 CEF4Delphi,因为我认为普通的 TWebBrowser 组件在性能和功能方面似乎有点下降。
我正在做的项目是显示网页,不需要显示任何 URL 地址。所以我只需要显示网页。
我发现了一些 VCL 应用程序演示,包括 CEF4Delphi,它们使用另一个 TChromiumWindow 或类似的东西来显示网页。而且演示中只有一个(AFAIK)FMX 应用程序示例,带有离屏渲染以显示在 TFMXBufferPanel 中。
我尝试了从 Demos 创建表单、加载 URL 和 AddObject 到主布局的确切方法,但只显示来自演示项目的橙色屏幕,或显示访问冲突错误。我可能不知道如何正确阅读 API 文档,我找不到它。
我从谷歌搜索所有与 CEF4Delphi 和 FMX 相关的东西,但这些东西已经过时了,从 DCEF3 或 FMX 之前的 Delphi 时代开始。如果没有解决方案,我将放弃并使用 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.