尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

TMS VCL UI Pack v13.6.1.0 FullSource 完整源码版:Delphi 老项目换皮前,先把这套控件库的底摸清

发布时间:2026/9/25 8:22:21

资讯中心
01
ARTICLE

TMS VCL UI Pack v13.6.1.0 FullSource 完整源码版:Delphi 老项目换皮前,先把这套控件库的底摸清

TMS VCL UI Pack v13.6.1.0 FullSource 完整源码版:Delphi 老项目换皮前,先把这套控件库的底摸清
简介TMS VCL UI Pack v13.6.1.0 FullSource 完整源码版面向使用 Delphi 与 CBuilder 的桌面应用开发者覆盖 7 至 13 Florence 版本源码全开放便于深度定制与二次开发。包内包含 TAdvStringGrid、TAdvPlanner、TAdvRichEditor、TAdvRibbon、TAdvTreeView、TAdvChart 等核心控件支持排序过滤、甘特排程、富文本编辑、Office 2021 风格界面与实时图表绑定并增强高 DPI 显示、打印分页、就地编辑与 CSV/XLS/RTF/PDF 导入导出能力。资源共约 2000 个文件以 pas 源码、dfm 窗体、dproj/dpr 工程、res/dcr 资源及 ico、jpg、pdf 文档为主压缩包约 105.53MB目录结构完整方便按控件模块检索与编译验证。目前已有 74 人学习下载适合需要稳定 VCL 组件库、研究源码实现或搭建企业级管理界面的中高级开发者参考使用。1. TMS VCL UI Pack v13.6.1.0 FullSource 完整源码版Delphi 老项目换皮前先把这套控件库的底摸清手上有个跑了七八年的 Delphi 项目界面还是 Windows 98 风格老板突然说要“现代化一点”你打开工程一看全是标准 VCL 控件堆出来的表单。这时候 TMS VCL UI Pack 这类控件库就会进入视野——它提供了一套风格统一、支持高 DPI、带皮肤机制的 VCL 控件能让你在不重写业务逻辑的前提下把界面拉到一个能看的水平。而 FullSource 完整源码版意味着你拿到的不只是编译好的 bpl 和 dcu而是全部 pas 源码可以跟版本、改源码、单步调试进控件内部。这篇文章面向的是正在评估或已经拿到这套源码的 Delphi 开发者讲清楚怎么把它跑起来、怎么用、哪些参数必须调、哪些坑一定会踩。不是科普是落地笔记。2. 从 7z 到可编译工程TMS VCL UI Pack 源码版的目录结构与编译链路2.1 解压后先别急着打开 IDE看懂目录再动手拿到TMS VCL UI Pack v13.6.1.0 FullSource 完整源码版.7z之后第一步不是双击打开 Delphi而是先解压到一个路径不含中文和空格的目录。这一点是老生常谈但每年还是有人栽在C:\Users\张三\Desktop\新建文件夹\这种路径上编译时报F1026 File not found或者F2063 Could not compile used unit排查半天才发现是路径问题。解压后典型目录结构大致如下不同小版本可能有微调但主体一致目录/文件作用Source\全部.pas源码核心单元都在这里Packages\.dpk/.dproj包工程按 Delphi 版本分目录Demos\示例工程验证安装是否成功的第一手材料Doc\帮助文档CHM 或 HTML 格式Lib\预编译的 dcu如果有但 FullSource 版应以源码编译为主*.inc条件编译包含文件控制不同 Delphi 版本的特性开关关键点在于Packages\下的包工程是按 IDE 版本分的。比如Delphi 11、Delphi 12各一个子目录里面是.dproj和.dpk。你要打开的是跟你当前 IDE 版本匹配的那个不要拿 Delphi 10.4 的包工程去 Delphi 12 里编译条件编译指令会对不上。2.2 编译顺序先 Runtime 再 Design顺序错了必翻车TMS 的包通常分两类Runtime 包和 Design 包。Runtime 包提供运行时控件功能Design 包提供 IDE 里的组件面板注册和设计期支持。编译顺序必须是先 Runtime 后 Design因为 Design 包依赖 Runtime 包。在 IDE 里操作路径是File → Open Project定位到Packages\DelphiXX\目录先打开名字里带Runtime的那个.dproj右键Build。编译通过后再打开Design包同样Build然后Install。如果你习惯用命令行CI 环境或者批量构建可以用msbuild# 先编译 Runtime 包注意替换实际路径和 IDE 版本 msbuild D:\Components\TMSVCLUIPack\Packages\Delphi12\TMSVCLUIPackPkg.dproj ^ /p:ConfigRelease /p:PlatformWin32 /t:Build # 再编译 Design 包 msbuild D:\Components\TMSVCLUIPack\Packages\Delphi12\TMSVCLUIPackPkgD.dproj ^ /p:ConfigRelease /p:PlatformWin32 /t:Build这里ConfigRelease和PlatformWin32是两个必须显式指定的参数。如果你只做 Win32 应用不需要编译 Win64 的包省时间。但如果你的项目要出 64 位版本Runtime 包的 Win64 平台也必须编译否则链接时会报找不到 obj。提示编译前确认 IDE 的Library Path里没有旧版本 TMS 的路径。多个版本共存时编译器可能优先找到旧版 dcu导致“明明改了源码但行为没变”的玄学问题。2.3 安装后在 IDE 里验证三个必查项包安装成功后不要急着写业务代码先做三个验证第一打开Demos\下任意一个示例工程直接编译运行。如果示例能跑起来且界面正常说明 Runtime 包没问题。第二在 IDE 里新建一个 VCL 应用看组件面板上是否出现了 TMS 的分类页签。如果没有说明 Design 包没安装成功回去检查 Design 包的Install步骤。第三拖一个TAdvEdit或TAdvStringGrid到窗体上编译运行。这一步验证的是设计期和运行期的联动是否正常。有时候 Design 包装上了但 Runtime 包的搜索路径不对设计期能看到控件但运行期报Class not found。这三个验证做完基本可以确认环境没问题了。接下来才是怎么用的问题。3. 核心控件的选型与参数配置TAdvStringGrid、TAdvEdit 和皮肤机制怎么配合3.1 TAdvStringGrid 替换 StringGrid 时哪些属性必须改TAdvStringGrid是这套控件库里使用频率最高的组件之一功能比标准TStringGrid强很多——支持排序、过滤、合并单元格、富文本、进度条嵌入等。但直接替换过去如果不改属性外观和交互可能反而不如原来。我一般会先调这几个属性// 在 FormCreate 或 AfterConstruction 里统一配置 AdvStringGrid1.Options : AdvStringGrid1.Options [goRowSelect, goColSizing, goRowSizing]; AdvStringGrid1.Options : AdvStringGrid1.Options - [goEditing]; // 按需只读表格关掉编辑 AdvStringGrid1.ScrollBars : ssBoth; AdvStringGrid1.FixedCols : 1; AdvStringGrid1.FixedRows : 1; AdvStringGrid1.DefaultRowHeight : 28; // 高 DPI 下 24 以下会挤 AdvStringGrid1.Look : glFlat; // 或 glOffice2007 等看皮肤方案 AdvStringGrid1.HintShowCells : True;goRowSelect让整行选中而不是单格选中对数据浏览场景更友好。DefaultRowHeight在 125% 或 150% 缩放下必须调大否则文字会被裁切。Look属性决定表格的绘制风格如果项目用了皮肤这里要跟皮肤管理器保持一致否则会出现表格风格和窗体其他部分割裂的情况。还有一个容易忽略的点TAdvStringGrid的Cells属性赋值方式和标准TStringGrid一样但如果你用了它的AddRow或InsertRow方法行索引的管理逻辑不同。标准StringGrid的RowCount是直接可写的TAdvStringGrid虽然也支持但更推荐用AddRow系列方法因为它会触发内部的行高和合并状态重算。3.2 TAdvEdit 的验证机制别在 OnExit 里手写校验了标准TEdit做输入校验通常是在OnExit里写一堆if判断然后弹ShowMessage。TAdvEdit内置了验证框架用好了能省掉大量重复代码。核心属性是EditType和ValidChars// 只允许输入数字范围 0-9999 AdvEdit1.EditType : etNumeric; AdvEdit1.NumericRange : nrBetween; AdvEdit1.NumericMin : 0; AdvEdit1.NumericMax : 9999; AdvEdit1.ErrorMessage : 请输入 0 到 9999 之间的数字; // 或者用正则如果版本支持 AdvEdit1.EditType : etCustom; AdvEdit1.ValidChars : 0123456789.-; AdvEdit1.MaxLength : 10;EditType设为etNumeric后非数字字符在输入时就会被拦截不需要等到OnExit。ErrorMessage在验证失败时自动弹出提示不用自己写ShowMessage。如果内置类型不够用可以用etCustom配合ValidChars做字符白名单。注意etNumeric对小数点的处理依赖DecimalSeparator如果你的程序要跑在不同区域设置的机器上要么统一设FormatSettings.DecimalSeparator要么用etFloat并显式指定。3.3 皮肤机制TAdvStyleManager 和 TAdvFormStyler 的分工TMS 的皮肤系统由两个核心组件驱动TAdvStyleManager和TAdvFormStyler。前者是全局管理器负责加载皮肤文件和分发样式变更事件后者挂在每个窗体上负责把当前皮肤应用到该窗体的所有 TMS 控件。典型用法是在主窗体放一个TAdvStyleManager设置StyleFile指向皮肤文件.vsf格式然后在每个需要换肤的窗体上放TAdvFormStyler把StyleManager属性指向主窗体的管理器。// 主窗体加载皮肤 AdvStyleManager1.StyleFile : ExtractFilePath(Application.ExeName) Skins\Office2019.vsf; AdvStyleManager1.Active : True; // 子窗体应用皮肤 AdvFormStyler1.StyleManager : FormMain.AdvStyleManager1; AdvFormStyler1.Active : True;这里有个血泪经验TAdvFormStyler的Active属性必须在窗体所有控件创建完成之后再设否则部分控件可能拿不到样式。我一般放在FormShow的第一行而不是FormCreate。另外皮肤文件.vsf的路径建议用ExtractFilePath(Application.ExeName)拼相对路径不要写死绝对路径。部署到客户机器上时目录结构一变就找不到皮肤文件程序会退回到默认样式看起来像“换肤功能失效了”。4. 避坑与排查源码版编译、部署、升级中最容易踩的五个坑4.1 编译时报 “Unit TMSxxx was compiled with a different version of xxx”现象编译项目时提示某个 TMS 单元是用不同版本的依赖单元编译的要求重新编译。原因这是 Delphi 的 dcu 版本不一致问题。通常是之前装过旧版 TMS旧版 dcu 残留在搜索路径里或者项目引用了预编译的 dcu 而不是源码。解决第一步在 IDE 的Tools → Options → Delphi Options → Library里检查Library Path删掉所有指向旧版 TMS 的路径。第二步在项目目录下搜索.dcu文件全部删除。第三步确认Packages\下的包工程用的是Build而不是CompileBuild会强制重新编译所有依赖。如果还不行在 IDE 里Project → Build All一次。4.2 设计期能看到控件运行期报 “Class TAdvxxx not found”现象窗体设计器里控件正常显示但运行程序时弹出Class TAdvStringGrid not found或类似的异常。原因Runtime 包的路径没有加到项目的搜索路径里或者 Runtime 包编译的是 Win32 但项目在跑 Win64。解决检查项目的Project → Options → Delphi Compiler → Search Path确保包含了 TMS 的Source\目录。如果是 Win64 项目确认 Runtime 包也编译了 Win64 平台。在 IDE 里Component → Install Packages里确认 Runtime 包已加载且平台匹配。4.3 高 DPI 下控件模糊或错位现象在 125% 或 150% 缩放的显示器上TMS 控件的文字模糊或者控件之间的间距不对。原因Delphi 的高 DPI 支持需要在项目选项里开启且 TMS 控件的DpiScaling相关属性要配合设置。解决在Project → Options → Application → Manifest里把 DPI 感知设为Per Monitor v2。然后在代码里确认TAdvStyleManager的DpiAware属性为True。对于TAdvStringGridDefaultRowHeight要按缩放比例动态计算不能写死。我一般会在FormCreate里根据Screen.PixelsPerInch算一个缩放系数统一乘到所有尺寸相关的属性上。4.4 升级 TMS 版本后旧代码编译不过现象从旧版升级到 v13.6.1.0 后原来能编译的代码报错提示某个属性或方法不存在。原因TMS 在大版本升级时会移除一些废弃属性或者改变某些方法的签名。FullSource 版虽然给了源码但不代表 API 完全向后兼容。解决先看Doc\目录下的更新日志或Readme找到 Breaking Changes 部分。如果没有文档直接在源码里搜索报错的属性名看它被替换成了什么。常见的情况是Font.Style相关的属性被整合进了Appearance或Style对象里。升级前建议在分支上做不要直接在主分支上升。4.5 部署到客户机器后皮肤失效现象开发机上皮肤正常打包部署到客户机器后界面变成默认 Windows 风格。原因.vsf皮肤文件没有随程序一起打包或者打包后路径不对。解决确认安装包或部署脚本里包含了Skins\目录下的.vsf文件。代码里加载皮肤时用ExtractFilePath(Application.ExeName) Skins\xxx.vsf不要用开发机的绝对路径。如果皮肤文件在资源里嵌入确认Resource加载逻辑在部署环境下也能正常工作。5. 进阶用法用 FullSource 改源码解决一个实际需求以及怎么验证改动没引入回归5.1 一个真实场景给 TAdvStringGrid 加一个“导出到 Excel 时保留合并单元格”的行为TAdvStringGrid自带SaveToCSV和SaveToXLS方法但默认的 XLS 导出不保留合并单元格信息。如果你做的报表有大量合并表头导出后格式就丢了。FullSource 版的好处在这里体现你可以直接改源码。具体做法是找到AdvGrid.pas里SaveToXLS的实现定位到写单元格循环的部分。合并信息存在MergeCells数组里导出时需要判断当前单元格是否是合并区域的左上角如果是在写 XLS 时调用合并 API。// 伪代码示意实际改动需要对照源码里的 XLS 写入逻辑 for Row : 0 to RowCount - 1 do begin for Col : 0 to ColCount - 1 do begin if IsMergedCell(Row, Col) then begin if IsMergeMainCell(Row, Col) then begin // 写入值并记录合并范围 XLS.WriteCell(Row, Col, Cells[Col, Row]); XLS.MergeCells(Row, Col, Row MergeHeight[Row, Col] - 1, Col MergeWidth[Row, Col] - 1); end; // 被合并的从属单元格跳过 end else XLS.WriteCell(Row, Col, Cells[Col, Row]); end; end;改源码的关键原则是只加不改。尽量在现有逻辑上做增量不要删改原有代码路径。这样后续升级 TMS 版本时你的改动容易迁移。5.2 改完源码后怎么确认没有引入回归改完AdvGrid.pas后不要只测你关心的那个导出功能。至少跑三类验证第一跑Demos\下跟TAdvStringGrid相关的所有示例确认基本功能没坏。第二写一个最小测试用例覆盖合并单元格导出、非合并单元格导出、空表格导出三种情况。第三如果项目里有自动化测试跑一遍全量。我一般还会在改动处加一个编译期开关比如{$IFDEF MY_EXCEL_MERGE_FIX}这样如果出问题可以快速关掉这个改动回到原始行为不用回滚整个文件。5.3 源码版值不值得投入一个判断标准FullSource 版比编译版贵这是事实。判断值不值得看一个标准你是否需要改控件内部行为或者需要单步调试进控件源码。如果你的项目只是拖控件、设属性、写事件从不关心控件内部怎么实现那编译版够用。但如果你遇到过“这个控件行为不对但我没法改”的情况或者排查一个 bug 时只能靠猜控件内部逻辑那 FullSource 版的价值就体现出来了。我自己的习惯是核心项目一定用 FullSource 版因为线上出问题时能单步进源码看状态比在黑匣子外面猜要快得多。这个习惯帮我省过至少两次通宵排查的时间。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。