ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Delphi XE10.2 老项目救星:TMS Component Pack v8.3.4.0 安装与实战避坑指南

Delphi XE10.2 老项目救星:TMS Component Pack v8.3.4.0 安装与实战避坑指南 简介本资源为Delphi平台知名组件集TMS Component Pack v8.3.4.0专为XE10.2 Tokyo版本适配面向使用Delphi或CBuilder进行Windows应用开发的中高级程序员。组件包覆盖用户界面、数据绑定、图表、网格、报表、导航与数据库访问等场景内含完整源代码便于理解原理并按需定制扩展。压缩包共约2000个文件整体103.4MB以pas源码、dcu编译单元、res资源、dfm窗体、dpr与dproj工程文件为主另含dpk包定义、inc头文件及bat编译脚本可快速在不同Delphi版本下构建测试。目前已有1202人学习下载。借助TAdvGrid、TMS FlexGrid、TMS Charts、TMS DB Navigator等控件开发者能高效搭建功能强大、界面友好的应用降低维护成本。1. 从 XE10.2 老项目说起TMS Component Pack v8.3.4.0 到底能解决什么手上维护着一套 Delphi XE10.2 老系统的朋友大概率都经历过这种场景客户临时要一个带分组、排序、导出 Excel 的表格或者要在 FireMonkey 里塞一个能播放 PPT 的浏览器控件翻遍 VCL 自带的 TStringGrid、TWebBrowser 发现要么功能残缺要么版本对不上。TMS Component Pack v8.3.4.0 就是冲着这类需求来的——它不是单个控件而是一整套覆盖 VCL 和 FireMonkey 的组件集合从高级表格、图表、日程、编辑器到网络、PDF 导出都有对应实现且明确适配 Delphi XE10.2Delphi 10.2 Tokyo。这套包适合两类人一是被原生控件功能卡住、又不想自己造轮子的业务开发者二是需要在 XE10.2 这个特定版本上做长期维护、不能随便升级 IDE 的团队。它解决的核心问题就一个用一套经过验证的第三方控件把界面层和导出层的重复劳动一次性省掉。2. 装之前先搞懂TMS Component Pack 的组件分层与 XE10.2 适配逻辑2.1 这套包里到底有什么为什么按 VCL / FMX 分两套TMS Component Pack 的组件不是随便堆在一起的它按运行时框架分成两大支VCL 支和 FireMonkeyFMX支。VCL 支主要面向 Windows 桌面传统应用包含 TAdvStringGrid、TAdvOfficePager、TAdvSmoothListBox、TAdvChartView 这类经典控件FMX 支则面向跨平台场景包含 TMSFMXGrid、TMSFMXChart 等。为什么必须分开因为 VCL 和 FMX 的渲染管线、消息机制、坐标系统完全不同一个控件不可能同时挂在两种框架下。你在 XE10.2 里新建 VCL Application 和新建 Multi-Device Application能用的组件面板页签是两套。这里有个选型判断如果你的项目是纯 Windows 桌面、且已经用了大量 VCL 原生控件优先走 VCL 支迁移成本最低如果项目要求同一套代码编译到 Windows 和 macOS或者界面需要 GPU 加速渲染才考虑 FMX 支。很多新手一上来就装 FMX 版结果发现老代码里的 TForm 和 FMX 的 TForm 根本不是一回事血泪经验就是先确认框架再动手。2.2 安装包结构与 XE10.2 的编译路径v8.3.4.0 的安装包通常包含源码目录、编译好的 DCU 目录、帮助文档和示例工程。关键目录结构大致如下目录/文件作用XE10.2 注意事项Source\VCLVCL 控件源码需确认路径无中文、无空格Source\FMXFMX 控件源码仅 Multi-Device 项目引用Lib\XE10.2\Win32预编译 DCU版本号必须匹配 10.2Packages\XE10.2设计期包 .bpl安装到 IDE 用Demos示例工程先编译 Demo 验证环境安装的本质是把设计期包.bpl注册进 IDE把运行期包.bpl和 DCU 路径加进项目搜索路径。XE10.2 的包版本号是 250如果你拿到的包目录写的是 XE10.1 或 XE10.3直接装会报“Invalid package version”或者编译期找不到符号。常见做法是先看 Packages 目录下有没有 XE10.2 专属文件夹没有就别硬上。2.3 安装步骤从关闭 IDE 到验证组件面板第一步彻底关闭 Delphi XE10.2包括后台残留的 bds.exe 进程。第二步把整个 TMS Component Pack 目录放到一个纯英文、无空格的路径下比如D:\Components\TMS83。第三步打开 XE10.2进入Component - Install Packages点击 Add定位到Packages\XE10.2下的设计期包文件通常命名类似TMSVCLPackD.bpl和TMSFMXPackD.bpl。第四步添加运行期包路径和 DCU 路径到Tools - Options - Delphi Options - Library的Library Path中Win32 和 Win64 分别加对应目录。第五步新建一个 VCL Application看组件面板是否出现 TMS 页签拖一个 TAdvStringGrid 到窗体上能正常显示即安装成功。提示如果组件面板没出现先检查是否只装了运行期包没装设计期包如果编译时报找不到 .dcu检查 Library Path 是否漏了对应平台目录。3. 上手实战用 TAdvStringGrid 和 TMSFMXGrid 做数据展示与导出3.1 TAdvStringGrid 的基础配置与 Excel 导出TAdvStringGrid 是这套包里使用频率最高的控件之一比原生 TStringGrid 多了排序、过滤、合并单元格、内嵌按钮、Excel 导入导出等能力。下面是一个最小可运行示例演示如何加载数据并导出为 Exceluses AdvGrid, AdvGridExcelIO; procedure TForm1.FormCreate(Sender: TObject); var I, J: Integer; begin // 设置行列数 AdvStringGrid1.RowCount : 11; AdvStringGrid1.ColCount : 5; // 填充表头 AdvStringGrid1.Cells[0, 0] : 编号; AdvStringGrid1.Cells[1, 0] : 名称; AdvStringGrid1.Cells[2, 0] : 数量; AdvStringGrid1.Cells[3, 0] : 单价; AdvStringGrid1.Cells[4, 0] : 金额; // 填充数据行 for I : 1 to 10 do begin AdvStringGrid1.Cells[0, I] : IntToStr(I); AdvStringGrid1.Cells[1, I] : 物料 IntToStr(I); AdvStringGrid1.Cells[2, I] : IntToStr(I * 10); AdvStringGrid1.Cells[3, I] : FormatFloat(0.00, I * 1.5); AdvStringGrid1.Cells[4, I] : FormatFloat(0.00, I * 10 * 1.5); end; // 启用排序和列宽自适应 AdvStringGrid1.Options : AdvStringGrid1.Options [goSorting, goColSizing]; AdvStringGrid1.AutoSizeColumns(True); end; procedure TForm1.btnExportClick(Sender: TObject); var ExcelIO: TAdvGridExcelIO; begin ExcelIO : TAdvGridExcelIO.Create(Self); try ExcelIO.AdvStringGrid : AdvStringGrid1; ExcelIO.XLSExport(D:\Output\inventory.xls); finally ExcelIO.Free; end; end;逻辑说明TAdvGridExcelIO是专门负责网格与 Excel 之间转换的桥接类它读取 AdvStringGrid 的行列结构和单元格内容按 XLS 格式写出。参数方面XLSExport接受完整文件路径扩展名决定格式如果要用 XLSX需要换成对应的 XLSXExport 方法视版本支持情况。AutoSizeColumns(True)让列宽根据内容自动调整避免导出后列宽全是一样宽。注意导出前确保网格的 Cells 已填充完毕否则导出的是空表。3.2 TMSFMXGrid 在跨平台项目中的初始化差异FMX 版的网格控件在初始化上和 VCL 版有明显区别FMX 没有Cells这种直接属性而是通过Cells[Col, Row]访问但行列索引从 0 开始且需要先设置RowCount和ColumnCount。另外 FMX 的坐标和字体单位是逻辑像素在高 DPI 屏上需要额外处理缩放。下面是一个 FMX 下的初始化片段procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin TMSFMXGrid1.RowCount : 11; TMSFMXGrid1.ColumnCount : 3; TMSFMXGrid1.Cells[0, 0] : 序号; TMSFMXGrid1.Cells[1, 0] : 项目; TMSFMXGrid1.Cells[2, 0] : 状态; for I : 1 to 10 do begin TMSFMXGrid1.Cells[0, I] : IntToStr(I); TMSFMXGrid1.Cells[1, I] : 任务 IntToStr(I); TMSFMXGrid1.Cells[2, I] : 进行中; end; // FMX 下设置列宽需通过 Columns 集合 TMSFMXGrid1.Columns[0].Width : 60; TMSFMXGrid1.Columns[1].Width : 200; TMSFMXGrid1.Columns[2].Width : 100; end;逻辑说明FMX 版的列宽控制走Columns集合而不是 VCL 的ColWidths数组。Cells的读写顺序是[Col, Row]和 VCL 版一致但 FMX 下如果 RowCount 设得过大而数据没填满会出现空白行建议按实际数据量动态设置。跨平台项目里FMX 网格在 macOS 上的字体渲染和 Windows 有差异常见做法是统一指定字体和字号避免两端显示不一致。3.3 用 TMS 组件处理 Excel 导入的边界情况导出讲完了导入同样高频。TAdvGridExcelIO 也支持XLSImport但导入时容易翻车的点在于源 Excel 如果有合并单元格、公式、日期格式导入后可能变成空值或乱码。处理思路是导入前先规范化源文件或者导入后遍历单元格做二次清洗。下面是一个导入后检查空值的片段procedure TForm1.btnImportClick(Sender: TObject); var ExcelIO: TAdvGridExcelIO; I, J: Integer; begin ExcelIO : TAdvGridExcelIO.Create(Self); try ExcelIO.AdvStringGrid : AdvStringGrid1; ExcelIO.XLSImport(D:\Input\source.xls); // 清洗把空单元格替换为占位符 for I : 1 to AdvStringGrid1.RowCount - 1 do for J : 0 to AdvStringGrid1.ColCount - 1 do if Trim(AdvStringGrid1.Cells[J, I]) then AdvStringGrid1.Cells[J, I] : -; finally ExcelIO.Free; end; end;逻辑说明XLSImport会覆盖当前网格内容所以导入前如果网格里有未保存的编辑要先提交或备份。清洗循环从第 1 行开始第 0 行是表头逐列检查空字符串。参数上Trim是为了排除只含空格的单元格。如果源文件是 XLSX需要确认当前版本是否支持对应方法不支持的话先用 Excel 另存为 XLS。4. 避坑与排查XE10.2 下装 TMS 包最容易翻车的五个点4.1 编译报“Unit not found”或找不到 .dcu现象新建项目后引用 AdvGrid 单元编译直接报 Unit AdvGrid not found。原因Library Path 里没有加入 TMS 的 DCU 目录或者加错了平台比如项目是 Win64 但只加了 Win32 路径。解决打开Tools - Options - Delphi Options - Library在Library Path里为 Win32 和 Win64 分别添加Lib\XE10.2\Win32和Lib\XE10.2\Win64的完整路径保存后重启 IDE 再编译。4.2 设计期包加载失败组件面板空白现象Install Packages 里添加了 .bpl但组件面板没有 TMS 页签。原因设计期包依赖的运行期包没有先加载或者 .bpl 的版本号与 XE10.2 不匹配。解决先确认Packages\XE10.2目录下的 .bpl 文件名带 250 版本标识然后在 Install Packages 里先添加运行期包再添加设计期包如果仍不行用Component - Install Packages的 Remove 清掉旧记录重新加。4.3 导出 Excel 时程序卡死或文件被占用现象点击导出按钮后界面无响应或者导出到一半报“文件正被另一进程使用”。原因目标文件正被 Excel 打开或者导出路径不存在。解决导出前检查目标目录是否存在用ForceDirectories确保路径导出前判断文件是否可写或者直接导出到临时文件再移动。另外大数据量导出时建议加进度提示避免用户以为卡死。4.4 FMX 项目在 Windows 上正常编译到 macOS 报错现象同一个 FMX 工程Windows 下编译通过切换到 macOS 目标平台时报找不到 TMSFMXGrid 相关符号。原因macOS 平台需要的 DCU 或源码路径没有加入对应平台的 Library Path或者 FMX 包没有为 macOS 编译。解决在 Library Path 中为 macOS 平台单独添加 TMS 的 FMX 源码路径或对应 DCU 目录如果只有源码确保源码目录被正确引用让 IDE 在目标平台上重新编译。4.5 安装后原生控件行为异常现象装完 TMS 包后原来正常的 TStringGrid 或 TWebBrowser 出现异常比如右键菜单变了、滚动条消失。原因TMS 包可能替换或挂钩了部分原生控件的默认行为或者设计期包与已有第三方包冲突。解决在 Install Packages 里暂时禁用 TMS 设计期包看原生控件是否恢复如果确认冲突考虑只加载运行期包、不加载设计期包改用代码动态创建 TMS 控件。5. 进阶技巧用 TMS 组件做 PDF 导出与浏览器控件的组合玩法5.1 从网格到 PDF绕过 Excel 直接生成报表很多场景下客户要的不是 Excel 而是 PDF 报表。TMS Component Pack 里通常带有 PDF 导出相关的单元常见做法是先把网格内容绘制到 PDF Canvas 上再逐页输出。下面是一个思路性片段展示如何遍历网格并写入 PDFuses AdvGrid, AdvPDFLib; procedure TForm1.ExportGridToPDF(const AFileName: string); var PDF: TAdvPDFLib; I, J: Integer; Y: Double; begin PDF : TAdvPDFLib.Create; try PDF.BeginDocument(AFileName); PDF.NewPage; Y : 20; for I : 0 to AdvStringGrid1.RowCount - 1 do begin for J : 0 to AdvStringGrid1.ColCount - 1 do begin PDF.DrawText(20 J * 100, Y, AdvStringGrid1.Cells[J, I]); end; Y : Y 18; if Y 750 then begin PDF.NewPage; Y : 20; end; end; PDF.EndDocument; finally PDF.Free; end; end;逻辑说明TAdvPDFLib提供文档级操作BeginDocument和EndDocument包裹整个导出过程NewPage在内容超出页面高度时手动分页。参数上DrawText的坐标单位是点pointA4 纸高度约 842 点所以 Y 超过 750 就换页。列宽这里用固定 100 点实际项目里应根据列内容动态计算。注意中文字体需要额外设置否则 PDF 里中文可能显示为乱码常见做法是嵌入中文字体或改用支持中文的绘制方法。5.2 用 TMS 浏览器控件加载 PPT 或本地 HTML热词里有人搜“delphi webbrowser 播放 ppt”原生 TWebBrowser 在 XE10.2 下对现代 HTML5 和 Office 在线预览支持有限。TMS 包里的浏览器控件通常基于更新的内核封装能更好地加载本地 HTML 或在线预览链接。一个实用技巧是把 PPT 先转成 HTML 或 PDF再用浏览器控件加载本地文件路径。下面是一个加载本地 HTML 的示例procedure TForm1.LoadLocalHtml(const AFilePath: string); begin // 确保文件存在 if not FileExists(AFilePath) then raise Exception.Create(HTML 文件不存在 AFilePath); // 用 file:// 协议加载本地文件 TMSWebBrowser1.Navigate(file:/// StringReplace(AFilePath, \, /, [rfReplaceAll])); end;逻辑说明Navigate接受 URL 格式本地文件需要加file:///前缀且路径中的反斜杠要替换成正斜杠。参数上如果 HTML 里引用了同目录的图片或 CSS相对路径会基于 HTML 文件所在目录解析所以资源要放在同一目录或子目录下。如果加载的是在线预览链接直接传完整 URL 即可但要注意网络环境是否可达。5.3 验证安装是否完整的三个检查动作装完之后别急着写业务代码先做三个验证第一新建 VCL Application拖 TAdvStringGrid 和 TAdvOfficePager 各一个编译运行确认无报错第二新建 Multi-Device Application拖 TMSFMXGrid编译到 Windows 和 macOS如果环境允许确认两端都能显示第三打开 Demos 目录下的任意示例工程编译运行确认示例功能正常。这三个动作走完基本能排除 90% 的安装问题。从那以后我每次装第三方控件包都强制走一遍“新建空工程 拖控件 编译 跑 Demo”的流程不省这一步因为省下的几分钟往往要用几小时来排查。希望帮到你。本文还有配套的精品资源点击获取
返回列表