本文作者:icy

CEF4Delphi:为 Delphi 和 Lazarus 应用注入现代 Web 能力

icy 昨天 15 抢沙发
CEF4Delphi:为 Delphi 和 Lazarus 应用注入现代 Web 能力摘要: 好的,这是一篇关于 Pascal 项目 CEF4Delphi 的介绍文章,包含其核心概念、优势、应用场景和简单实例。 CEF4Delphi:为 Delphi 和 Lazarus 应...

CEF4Delphi:为 Delphi 和 Lazarus 应用注入现代 Web 能力



CEF4Delphi:为 Delphi 和 Lazarus 应用注入现代 Web 能力

标题一:项目简介:什么是 CEF4Delphi?

CEF4Delphi 是一个开源项目,它为 Embarcadero Delphi 和 Free Pascal Lazarus 提供了一个强大、完整的封装,使其能够无缝集成 Chromium Embedded Framework

简单来说,CEF 是谷歌 Chromium 浏览器核心的一个封装库,允许开发者将完整的、高性能的 Chromium 浏览器控件嵌入到自己的桌面应用程序中。而 CEF4Delphi 则让 Pascal 开发者(使用 Delphi 或 Lazarus)能够轻松利用这一技术。

项目核心地址: https://github.com/salvadordf/CEF4Delphi

通过 CEF4Delphi,你的 Delphi/Lazarus 程序可以: *   显示现代网页:渲染复杂的 HTML5、CSS3 和 JavaScript 内容,效果与 Chrome 浏览器一致。 *   构建混合桌面应用:使用 HTML/JS/CSS 构建用户界面,用 Pascal 处理底层业务逻辑和本地 API 调用。 *   替代传统 UI 控件:在需要复杂、动态或高度定制化界面的地方(如图表、富文本编辑器、地图),使用 Web 技术来实现。 *   实现应用内浏览器:在软件内部打开帮助文档、用户协议或在线内容,而无需调用外部浏览器。

标题二:为何选择 CEF4Delphi?核心优势解析

  1. 与现代 Web 标准完全同步:基于 Chromium,意味着你的应用能支持最新的 HTML5、CSS3、JavaScript(ES6+)以及 WebGL、WebRTC 等高级特性。无需担心兼容性问题。

  2. 卓越的性能:直接使用 Chromium 的 Blink 渲染引擎和 V8 JavaScript 引擎,渲染速度和 JS 执行效率远超传统的 Delphi WebBrowser 控件(基于老旧的 IE 内核)。

  3. 强大的进程模型:支持 Chromium 的多进程架构,网页崩溃不会导致你的主程序崩溃,提升了应用的稳定性和安全性。

  4. 丰富的功能与事件:项目封装了 CEF 的绝大部分功能,包括 Cookie 管理、网络请求拦截、自定义资源加载、JavaScript 与 Pascal 双向通信、开发者工具、打印、下载控制等。

  5. 活跃的社区与维护:开发者 Salvador Díaz Fau 长期积极维护该项目,紧跟 CEF 上游更新,社区响应迅速,有丰富的示例和讨论。

  6. 跨平台支持:得益于 CEF 和 Pascal 本身的跨平台特性,使用 CEF4Delphi 开发的应用可以编译运行在 Windows、macOS 和 Linux 上。

标题三:快速入门:一个简单的嵌入式浏览器实例

下面演示如何在 Delphi 中创建一个最简单的、带导航功能的嵌入式浏览器窗口。

步骤 1:准备1.  从 GitHub 下载 CEF4Delphi 源码。 2.  根据项目 README.md 的说明,下载对应平台的 CEF 二进制文件包,并放置到指定目录。 3.  在 Delphi 中,将 CEF4Delphi 的源码路径添加到库路径,并打开 demos 文件夹下的示例工程进行学习和编译测试。

步骤 2:创建主窗体创建一个新的 VCL 窗体应用,在窗体上放置以下控件: *   TEdit (命名为 AddressEdt):用于输入网址。 *   TButton (命名为 GoBtn):用于触发导航。 *   TChromium (来自 CEF4Delphi 组件面板):这是核心的浏览器控件,命名为 Chromium1。 *   TCEFWindowParent (来自 CEF4Delphi 组件面板):这是浏览器的容器控件,命名为 CEFWindowParent1。将 Chromium1DefaultUrl 属性设为 about:blank

调整 TCEFWindowParent 大小,使其占据窗体大部分区域。

步骤 3:编写核心代码

text
unit MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes;

type
  TForm1 = class(TForm)
    CEFWindowParent1: TCEFWindowParent;
    Chromium1: TChromium;
    Panel1: TPanel;
    AddressEdt: TEdit;
    GoBtn: TButton;
    procedure FormCreate(Sender: TObject);
    procedure GoBtnClick(Sender: TObject);
    procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
    // 标记浏览器是否已创建
    FCanClose: Boolean;
    FClosing: Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FCanClose := False;
  FClosing := False;
  // 创建浏览器实例,实际创建在 Chromium1AfterCreated 事件中完成
  Chromium1.CreateBrowser(CEFWindowParent1);
end;

// 浏览器创建成功后的关键事件
procedure TForm1.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
begin
  // 此时浏览器才真正可用,可以在此进行初始导航或其他操作
  FCanClose := True;
  // 将 TCEFWindowParent 与浏览器的窗口句柄关联
  CEFWindowParent1.UpdateSize;
  // 可选:初始加载一个页面
  // Chromium1.LoadURL('https://www.google.com');
end;

// 导航按钮点击事件
procedure TForm1.GoBtnClick(Sender: TObject);
begin
  // 简单的 URL 检查,确保有协议头
  var URL := Trim(AddressEdt.Text);
  if (Pos('http://', URL) <> 1) and (Pos('https://', URL) <> 1) then
    URL := 'https://' + URL;

  // 命令浏览器加载该 URL
  Chromium1.LoadURL(URL);
end;

// 安全关闭窗体的必要处理
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := FCanClose;

  if not FClosing then
  begin
    FClosing := True;
    // 通知浏览器开始关闭流程
    Chromium1.CloseBrowser(True);
  end;
end;

end.

步骤 4:程序初始化在项目主文件(.dpr)中,需要在程序启动和退出时初始化和关闭 CEF。

text
program DemoBrowser;

uses
  Vcl.Forms,
  uCEFApplication, // 引入 CEF 应用单元
  MainForm in 'MainForm.pas' {Form1};

{$R *.res}

begin
  // 创建全局 CEF 应用
  GlobalCEFApp := TCefApplication.Create;

  // 这里可以设置许多 CEF 的全局属性,如日志文件、缓存路径等
  // GlobalCEFApp.LogFile := 'debug.log';
  // GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;

  // 启动 CEF 主进程
  if GlobalCEFApp.StartMainProcess then
  begin
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;

  // 程序退出时销毁全局 CEF 应用
  GlobalCEFApp.Free;
end.

标题四:进阶应用场景与建议

  • Pascal 与 JavaScript 通信:这是混合开发的核心。你可以使用 Chromium1.ExecuteJavaScript 执行 JS 代码,也可以通过 Chromium1.JavascriptExtensions 注册 Pascal 函数供网页 JS 调用,实现无缝交互。

  • 自定义资源处理:拦截网络请求,将本地文件或内存流作为资源(如 HTML、图片)提供给浏览器,用于创建离线应用或保护资源。

  • UI 框架集成:你可以使用 Vue.js、React 或 Angular 等前端框架来构建复杂的应用界面,然后通过 CEF4Delphi 提供的通信接口与后端 Delphi 逻辑连接。

  • 注意事项:CEF 会显著增加应用程序的发布体积(因为需要携带 Chromium 组件),请根据项目需求权衡。务必遵循 CEF 和 Chromium 的许可协议。

结语

CEF4Delphi 是 Pascal 开发生态中一个至关重要的项目,它弥合了传统原生桌面开发与现代 Web 技术之间的鸿沟。无论是为了提升现有应用的界面表现力,还是为了采用全新的“Web 前端 + Pascal 后端”架构来开发跨平台桌面应用,CEF4Delphi 都是一个值得深入研究和使用的强大工具。从项目丰富的 Demo 开始,是探索其能力的最佳途径。

CEF4Delphi.zip
类型:压缩文件|已下载:1|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://www.zelig.cn/2026/02/260.html发布于 昨天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

验证码

评论列表 (暂无评论,15人围观)参与讨论

还没有评论,来说两句吧...