使用 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

FPGA 50 ,Xilinx Vivado 2020 版本安装流程,以及常见问题解析,附中文翻译( Vivado 2020 版本安装教程 )

FPGA 50 ,Xilinx Vivado 2020 版本安装流程,以及常见问题解析,附中文翻译( Vivado 2020 版本安装教程 )

前言 Xilinx 统一安装程序(Unified Installer) 是进行 FPGA 与异构计算平台开发的重要基础工具,集成了 Vivado、Vitis 以及相关文档与设备支持组件。正确完成安装是后续进行硬件设计、软件开发与系统验证的前提。 本文以 Xilinx 统一安装程序 2020.1 为例,结合实际安装过程,对 安装步骤 进行逐步说明,并对 关键选项 的含义进行必要解释。同时,针对安装过程中可能出现的 常见错误(如归档文件无法打开、安装中断等问题),给出原因分析与解决建议,帮助用户快速定位并解决问题。 需要注意的是,安装文件的完整性与安装环境的稳定性对安装成功率影响较大。若安装过程中出现异常,建议优先检查 安装包是否完整、磁盘空间是否充足以及系统权限与安全软件设置是否合理。希望本文能够为初次接触 Xilinx 工具 或在安装过程中遇到问题的用户提供参考和帮助。

PyBullet实战:用AABB碰撞检测让R2D2机器人避开障碍物(附完整代码)

从碰撞检测到智能避障:用PyBullet为R2D2机器人注入“触觉” 如果你曾经尝试过在虚拟世界里让一个机器人动起来,大概率会遇到一个令人头疼的问题:它要么像个醉汉一样横冲直撞,要么对眼前的障碍物视而不见,一头撞上去。几年前,我第一次用PyBullet做机器人仿真时,就遇到了这个尴尬。我让一个R2D2模型在场景里跑,结果它径直冲向一个立方体,然后……穿过去了。那一刻我意识到,让机器人“动起来”只是第一步,让它“感知”并“避开”环境中的物体,才是仿真从玩具走向实用的关键。 PyBullet作为一款强大的物理仿真引擎,其真正的价值不仅在于能模拟重力、关节运动这些基础物理现象,更在于它提供了丰富的环境交互能力,其中碰撞检测就是实现智能避障的基石。而AABB(轴对齐包围盒) 作为一种高效、实用的碰撞检测方法,是我们在仿真中为机器人赋予“触觉”的首选工具。这篇文章,我将带你深入PyBullet的碰撞检测世界,手把手教你如何为经典的R2D2机器人实现一套实时、可靠的动态避障系统。我们不止步于让轮子转起来,更要让机器人学会“看路”。 1. 理解PyBullet中的碰撞检测:不止于AABB

OpenClaw配置Bot接入飞书机器人+Kimi2.5

OpenClaw配置Bot接入飞书机器人+Kimi2.5

上一篇文章写了Ubuntu_24.04下安装OpenClaw的过程,这篇文档记录一下接入飞书机器+Kimi2.5。 准备工作 飞书 创建飞书机器人 访问飞书开放平台:https://open.feishu.cn/app,点击创建应用: 填写应用名称和描述后就直接创建: 复制App ID 和 App Secret 创建成功后,在“凭证与基础信息”中找到 App ID 和 App Secret,把这2个信息复制记录下来,后面需要配置到openclaw中 配置权限 点击【权限管理】→【开通权限】 或使用【批量导入/导出权限】,选择导入,输入以下内容,如下图 点击【下一步,确认新增权限】即可开通所需要的权限。 配置事件与回调 说明:这一步的配置需要先讲AppId和AppSecret配置到openclaw成功之后再设置订阅方式,

带可二次开发的管理配置端 + 非低代码 + 原生支持标准化 Skill框架选择

「带可二次开发的管理配置端 + 非低代码 + 原生支持标准化 Skill」的开源 Agent 框架,筛选 3款完全匹配的框架(均为代码级可扩展、自带 Skill 管理后台、支持 SKILL.md/MCP 标准),附核心特性、二次开发要点和部署步骤,都是企业级/开发者友好的选型: 一、首选:LangGraph + LangServe(LangChain 官方生态,Python 栈,极致可扩展) 核心定位 LangChain 官方推出的「Agent 编排 + 服务化」框架,自带可二次开发的 Skill/Tool 管理后台(LangServe Dashboard),纯代码开发、无低代码封装,是 Python 生态的最佳选择。 关键特性