使用 Delphi + WebView4Delphi 初步使用完整指南

WebView4Delphi 可以做什么

WebView4Delphi 是 Delphi/ C++Builder 的浏览器控件封装,基于 Microsoft Edge WebView2。简单来说,它可以在 Delphi 桌面程序里嵌入完整的 Chromium 内核浏览器,支持最新的网页标准和功能。
WebView4Delphi 不仅是一个“浏览器控件”,更是 Delphi 桌面应用与现代 Web 技术的桥梁。
你可以把它当作:内嵌网页的 UI 窗口/桌面自动化工具/脚本和插件平台
它能做的事情几乎只受你的 Delphi 与 JS 技能限制。

一.下载与安装 WebView4Delphi

从 GitHub 官方仓库下载 WebView4Delphi:
访问 https://github.com/salvadordf/WebView4Delphi,选择 Code → Download ZIP 下载压缩包,或通过 Git 命令克隆仓库:
git clone https://github.com/salvadordf/WebView4Delphi.git

在这里插入图片描述

二.安装 Edge WebView2 Runtime

依赖:从 Microsoft 官方下载 Evergreen 版本:
https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section
详细的安装方法
安装完成后需重启系统。

三.安装 WebView4Delphi

1.下载好的WebView4Delphi-main.zip压缩文件进行解压
2.用delphi13打开在目录下的 .\packages\WebView4Delphi.dpk
3.右上的projects窗口右击WebView4Delphi.bpl然后点Build(或 Compile)

在这里插入图片描述

4.如果提示在这里WebView4DelphiVCL_register.pas出错 就注释掉出错的代码这些是LOGO没有关系的

uses {$IFDEF DELPHI16_UP} System.Classes, Winapi.Windows, System.SysUtils, //{$IFDEF ADDSPLASHSCREENLOGO}ToolsApi,{$ENDIF} {$ELSE} Classes, Windows, SysUtils, {$ENDIF} uWVBrowser, uWVWindowParent; {$IFDEF DELPHI16_UP}{$IFDEF ADDSPLASHSCREENLOGO} procedure AddBitmapToSplashScreen; const {$I ..\source\uWVVersion.inc} var TempBitmap : HBITMAP; TempVersion : string; begin // 添加 IDE 启动画面 Logo(可删除) // if assigned(SplashScreenServices) then // begin // TempBitmap := LoadBitmap(FindResourceHInstance(HInstance), 'WebView2'); // try // TempVersion := IntToStr(WEBVIEW2LOADERLIB_VERSION_MAJOR) + '.' + // IntToStr(WEBVIEW2LOADERLIB_VERSION_MINOR) + '.' + // IntToStr(WEBVIEW2LOADERLIB_VERSION_RELEASE) + '.' + // IntToStr(WEBVIEW2LOADERLIB_VERSION_BUILD); // // SplashScreenServices.AddPluginBitmap('WebView4Delphi ' + TempVersion, TempBitmap, False, 'MIT license'); // finally // DeleteObject(TempBitmap); // end; // end; end; {$ENDIF}{$ENDIF} 

5.编译成功会显示再次右键WebView4Delphi.bpl这个包点击 Install
安装成功后,在Palette组件栏将显示 TWVBrowser 控件。

在这里插入图片描述

6.把路径添加到库
菜单 Tools → Options → Language → Delphi → Library Path
WebView4Delphi目录下.\packages.\source 加进去

在这里插入图片描述

五 . 初始使用复制 WebView2Loader.dll

非常关键的一步!!! 因为如果不复制这文件,程序会启动会出错。
在下载的WebView4Delphi目录下找到bin32文件夹或bin64文件夹:
如果你的开发程序是32位 那么就复制 .\bin32\WebView2Loader.dll
如果你的开发程序是64位 那么就复制 .\bin64\WebView2Loader.dll
复制到你的项目根目录(与 EXE 文件同一层)。

在这里插入图片描述


WebView2Loader.dll 历史版本
https://www.nuget.org/stats/packages/Microsoft.Web.WebView2?groupby=Version

常见问题解决

组件未显示问题:
确认 .bpl 文件已正确安装,检查 Delphi 是否重启。验证 Edge WebView2 Runtime 是否安装成功。

初始化错误(InitializationError):
确保程序以管理员权限运行,检查系统环境变量是否包含 WebView2 路径。可通过代码检测错误:

if GlobalWebView2Loader.InitializationError then ShowMessage(GlobalWebView2Loader.ErrorMessage); 

初始使用

确认 CreateBrowser 方法在 FormShow 事件中调用,避免在 FormCreate 中初始化。
逻辑控件WVBrowser
时间控件Timer
网页显示控件 WVWindowParent1 把它放在窗体上属性Browser:=WVBrowser1;

基础使用示例

以下代码演示加载网页的基本流程:

unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Vcl.StdCtrls,Vcl.ExtCtrls,Vcl.ComCtrls, Winapi.WebView2, Winapi.ActiveX, uWVBrowserBase, uWVBrowser,uWVWinControl, uWVWindowParent, uWVLoader,uWVCoreWebView2Args, uWVTypes,uWVTypeLibrary; type TForm1 = class(TForm) ButtonLoad: TButton; Timer1: TTimer; WVBrowser1: TWVBrowser; WVWindowParent1: TWVWindowParent; procedure ButtonLoadClick(Sender: TObject); procedure WVBrowser1AfterCreated(Sender: TObject); procedure FormShow(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // 窗体显示时触发 procedure TForm1.FormShow(Sender: TObject); begin Timer1.Enabled:=False; WVWindowParent1.Browser:=WVBrowser1; // 检查 WebView2 加载器初始化是否出错 if GlobalWebView2Loader.InitializationError then ShowMessage(GlobalWebView2Loader.ErrorMessage) // 显示错误信息 else // 如果 WebView2 已经初始化成功 if GlobalWebView2Loader.Initialized then // 创建浏览器控件,并指定父窗口句柄 WVBrowser1.CreateBrowser(WVWindowParent1.Handle) else // 如果还未初始化完成,则启用定时器等待 Timer1.Enabled := True; end; // 当点击按钮时,加载指定网页 procedure TForm1.ButtonLoadClick(Sender: TObject); begin // 使用 TWVBrowser 的 Navigate 方法打开网页 WVBrowser1.Navigate('https://www.baidu.com'); end; // 当 WVBrowser 控件完成创建后触发 procedure TForm1.WVBrowser1AfterCreated(Sender: TObject); begin // 更新浏览器窗口大小,确保浏览器控件填充父窗口 WVWindowParent1.UpdateSize; end; // 定时器事件,用于轮询 WebView2 初始化状态 procedure TForm1.Timer1Timer(Sender: TObject); begin // 先关闭定时器,避免重复触发 Timer1.Enabled := False; // 如果 WebView2 已初始化成功 if GlobalWebView2Loader.Initialized then // 创建浏览器控件,并指定父窗口句柄 WVBrowser1.CreateBrowser(WVWindowParent1.Handle) else // 如果仍未初始化,则再次启用定时器继续等待 Timer1.Enabled := True; end; procedure TForm1.Btn_FindInputClick(Sender: TObject); var script: wvstring; begin // JS 脚本:遍历所有 input,找到 value="文本框3" 的元素,返回 outerHTML script := 'var inputs = document.getElementsByTagName("input");' + 'var;' + 'for (var i=0; i<inputs.length; i++) {' + ' if (inputs[i].value === "文本框3") {' + ' inputs[i].value="新文本111";' + ' result = inputs[i].outerHTML;' + ' break;' + ' }' + '}' + 'result;'; // 执行 JS WVBrowser1.ExecuteScript(script); end; procedure TForm1.Btn_GetIdClick(Sender: TObject); var script: wvstring; begin // 获取指定 ID 的元素内容 script := 'document.getElementById("pagination").innerText = "新的内容 from Delphi";'; // Delphi 13 + WebView4Delphi 旧版本使用 Retrieve HTML 方式获取结果 WVBrowser1.ExecuteScript(script); end; // 程序初始化部分,全局 WebView2 加载器配置 initialization // 创建全局 WebView2 加载器对象 GlobalWebView2Loader := TWVLoader.Create(nil); // 设置 WebView2 用户数据缓存路径,防止使用默认路径 GlobalWebView2Loader.UserDataFolder := ExtractFileDir(Application.ExeName) + '\CustomCache'; // 启动 WebView2 初始化流程 GlobalWebView2Loader.StartWebView2; 

关键点:

  • 使用 GlobalWebView2Loader 检查运行时状态。
  • Navigate 方法传入目标 URL 字符串。
  • 避免在窗体未显示时调用 CreateBrowser

Read more

AI时代人人都是产品经理:架构设计:从 0 到 1 搭建 AI 产品的信息架构与核心业务流程

AI时代人人都是产品经理:架构设计:从 0 到 1 搭建 AI 产品的信息架构与核心业务流程

一、为什么AI产品需要重新设计信息架构? 在传统软件产品中,信息架构(IA)的核心是将功能按用户认知逻辑组织,比如电商APP的"商品-购物车-结算"流程,本质是对"人找货"逻辑的数字化映射。但AI产品的核心逻辑是**“货(服务)找人”**:用户的需求不再是明确的功能调用,而是模糊的任务目标(比如"帮我优化一份市场报告")。 这种差异直接导致了两个核心痛点: * 传统的菜单式导航无法适配AI产品的开放式交互 * 用户对AI能力的认知不清晰,容易产生"不会用"或"用不好"的挫败感 * AI的输出结果不可控,需要在架构层设计"修正-反馈"闭环 核心结论:AI产品的信息架构不是"功能的容器",而是&

用Python打造AI三剑客:自动总结+写代码+查资料的完整指南

用Python打造AI三剑客:自动总结+写代码+查资料的完整指南

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 目录 * 一、准备工作:环境与API配置 * 1.1 技术栈选择 * 1.2 环境配置 * 1.3 核心工具类封装 * 二、工具一:智能文档总结器 * 2.1 功能设计 * 2.2 核心代码实现 * 2.3 使用效果对比 * 三、工具二:AI代码生成器 * 3.1 功能架构 * 3.2 核心实现 * 交互式代码生成器 * 使用示例 * 4.2 核心代码 * 4.3 搜索效率对比 * 五、

2026年3月23日技术资讯洞察:AI Agent失控,Claude Code引领AI编程新趋势

兄弟们早上好!今天是2026年3月23日,我又准时给大家分享今天的技术资讯啦,就是这么准时!话不多说,开始上菜! 1. Meta内部AI Agent失控:首个Sev 1级生产事故敲响安全警钟 来源: InfoQ《Meta 内部 Agent 失控升级:首个 Sev 1 级事故曝光,系统数据裸奔了两小时》 发布时间: 2026年3月20日 事件回顾:权限失控两小时 上周,Meta内部发生了一起典型的"Agent失控"生产事故。一名Meta员工在内部论坛发帖求助技术问题,另一名工程师调用公司内部的AI Agent来分析问题。然而,这个Agent没有跟调用者私聊,而是直接在论坛上公开发布了建议回复。 更糟糕的是,Agent给出的建议是错误的。提问员工按照这个错误信息操作,导致权限配置出错,大量公司内部数据+用户相关数据短暂暴露给一批原本无权限的工程师。整个暴露过程持续近2小时,Meta内部将其定为Sev 1级,即公司安全事件体系中第二高的严重等级。 技术剖析:上下文压缩的安全隐患

AI三分钟第1弹|3分钟学会给Cursor配置代理

AI三分钟第1弹|3分钟学会给Cursor配置代理 文章目录 * AI三分钟第1弹|3分钟学会给Cursor配置代理 * 正文 * 拿去用 * 讲清楚 * 记住它 * 结语 * 引用 * 版权信息 什么是AI三分钟? 《AI三分钟》专栏旨在提供短小精悍的AI工具使用技巧或者知识 在这个时间碎片化、知识碎片化的时代 用最精炼的语言和最生动的故事 3分钟完成一项干货的科普 正文 拿去用 方法一:直接用博主的配置文件(推荐) 1. 打开Cursor,按 Cmd + Shift + P(Mac)或 Ctrl + Shift + P(Windows)打开检索框 2. 重启Cursor使代理设置生效 3. 点击下图中的首选项,选择Cursor首选项配置,进入network(网络管理)页面 将HTTP协议改成HTTP1.1 粘贴博主编辑好的配置(全部覆盖,覆盖前请自行备份之前的用户设置)