ARTICLE DETAIL

资讯详情

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

TMS Component Pack v8.3.4.0在Delphi XE10.2中的安装配置与实用技巧

TMS Component Pack v8.3.4.0在Delphi XE10.2中的安装配置与实用技巧 简介TMS Component Pack v8.3.4.0 XE10.2 是一套面向 Delphi 与 CBuilder 平台的成熟控件集针对 Delphi XE10.2 Tokyo 深度优化覆盖界面设计、网格展示、图表统计、数据库操作等高频开发场景能帮助桌面端开发者大幅缩短编码与调试周期。资源包约 103.4MB共 2000 个文件以 Pascal 源文件、编译单元、窗体定义、资源文件和安装包为主体同时附带多版本编译脚本、多国语言资源与示例项目方便在 XE10.2 及相关环境中自动构建和自定义编译。包内组件包括高级网格、交叉表、专业图表、数据库导航等数十种实用控件均提供完整源代码开发者不仅可以直接集成成熟功能还能深入阅读实现细节按业务需求调整组件行为为二次开发和长期维护带来便利。此外压缩包中还含有大量位图、图标、PDF 文档和示例数据库等辅助资源为界面设计与功能演示提供了直接素材也方便离线查阅控件使用说明。该资源已吸引 1198 人学习或下载配合清晰的目录结构适合具备一定 Delphi 基础、希望提升控件运用与组件定制能力的中高级开发人员参考。1. 项目核心定位与选型思考1.1 功能简述与选型考量前阵子接手一个老项目的维护开发环境是 RAD Studio 10.2 Tokyo也就是大家常说的 XE10.2。这套系统是十几年的 Delphi 老项目UI 层还在用原生 TButton、TEdit 那一套客户早就看不下去了。我第一反应是换框架但业务逻辑和数据库访问层动不了最后只能走“增量改版”的路子保留原有项目结构在界面层引入一套更现代的第三方控件库。当时对比了好几套方案最终定的是 TMS Component Pack v8.3.4.0。TMS Component Pack 是德国 TMS Software 公司出品的 VCL/FMX 控件集合不是某单个控件而是包含几十个功能模块的“全家桶”从高级表格、日历、编辑器到图表、任务面板、工具栏、对话框覆盖面非常广。这个包最吸引我的一点是它对老版本 Delphi 的兼容性做得很稳尤其 v8.3.4.0 这个版本官方明确支持 XE10.2安装编译基本不会遇到“IDE 版本太新控件包不认”的尴尬。对于需要长期维护老项目的团队来说稳定压倒一切这个选型逻辑比追求新功能更重要。1.2 v8.3.4.0与XE10.2的适配解读说下版本对应关系很多人会搞混。XE10.2 是 RAD Studio 10.2 Tokyo 的简称不是“XE 10.2”。TMS Component Pack 从 v7.x 开始就分“VCL 版”和“FMX 版”v8.3.4.0 是同时包含两套源代码的完整发行版。它对应的 IDE 版本是 10.2所以安装后可以在 Win32 和 Win64 两个目标平台下编译使用。如果用的是 10.3 或 10.4最好升级到 TMS 组件包的更高版本强行装 v8.3.4.0 虽然也能用但部分设计期编辑器会出现兼容性警告。另外v8.3.4.0 自带的设计期包是分平台编译的。默认安装程序会自动注册 Rad Studio 10.2 的组件面板但如果你之前装过其他版本的 TMS 包注册信息会互相覆盖。这种情况我后面会单独讲怎么处理。2. XE10.2环境下的安装与配置实操2.1 安装前准备安装 TMS Component Pack v8.3.4.0 前先把两件事做好。第一关掉正在运行的 RAD Studio IDE否则安装程序写入 BPL 文件时会被 IDE 进程锁定报“文件被占用”的错误。第二确认 Delphi 的库路径里没有遗留旧版本 TMS 控件的路径如果有先清理掉否则编译新装控件时会链接到旧包出现莫名其妙的“类重复定义”。这个包解压后会有两个主要目录CommonSource放的是各控件共同的底层代码Packages下是按 IDE 版本组织的分包工程。注意不要直接把CommonSource手工加进搜索路径虽然也能编译过但后续升级维护时容易漏文件最好通过安装程序自带的工程组统一编译安装。2.2 编译安装步骤v8.3.4.0 的安装流程不算复杂但每个步骤都不能跳。我用的是手动编译方式步骤如下打开Packages\IDE版本\dcl\TMSVCL.dproj设计期包工程编译一次。再打开TMSVCLR.dproj运行时包工程编译一次。在 IDE 的“组件”菜单里选择“安装组件”把编译好的dclTMSVCL260.bpl添加进去。这里要注意10.2 对应包文件后缀编号是 260如果是 10.3 就是 270不同版本不能混用。编译顺序必须是先运行时包runtime再设计期包design time反过来会提示找不到基础 RTL 单元。我第一次装的时候图省事直接只装了设计期包结果启动 IDE 后所有 TMS 控件的图标都带问号窗体上已有的控件也全部变成“未找到类”。安装完成后默认会生成一个TMS Component Pack组件页里面按功能分组排列。如果没看到在组件面板右键勾选“TMS”目录即可。还有一个细节安装完后重启 IDE进入“工具 选项 Delphi 选项 库”确认CommonSource路径已经自动加进去没有自动加的话手动补上。2.3 配置库路径与运行时包很多新手在安装第三方控件后编译自己的程序时能通过但运行时提示“无法找到 dclTMSVCL260.bpl”这种情况多半是运行时包文件名没有进到系统搜索路径。解决方法是把包文件所在的目录加入环境变量 PATH或者直接放到C:\Windows\System32。我习惯放在 RAD Studio 的bin目录下和 IDE 自带 BPL 放在一起省得以后改环境变量。还有一点是关于 Win32 和 Win64 双平台。如果你的项目只需要 32 位可以只编译 Win32 包。但如果你维护的是既有 32 位又有 64 位安装包的产品建议两个平台都编译并安装。这个控件包的不少版本在 64 位编译上有些历史坑比如个别依赖第三方 C 静态库的控件在 64 位下链接不通过。遇到这种情况不要死磕先跳过那个控件等真正用到时再针对性解决别让整体工程卡在一个用不上的功能上。3. 常用控件实战解析3.1 AdvStringGrid把表格做到极致TMS Component Pack 里最出圈、最常被人提起的应该就是TAdvStringGrid。这个表格控件的功能密度比 Delphi 原生 TStringGrid 高出几个量级。如果你要做一个数据维护界面需要合并单元格、下拉筛选、单元格内嵌进度条、一键导出 Excel原生控件基本要写几百行辅助代码换 AdvStringGrid 后大部分功能开箱即用。我测试时用的关键属性有这几个AdvStringGrid1.Options : AdvStringGrid1.Options [goRowSelect]; // 整行选中模式 AdvStringGrid1.FixedRows : 1; // 首行冻结作为表头 AdvStringGrid1.Columns[2].Width : 120; // 控制列宽 AdvStringGrid1.Columns[0].Header : 编号; // 直接设置表头文字 AdvStringGrid1.MergeCells(1, 1, 3, 1); // 合并单元格参数分别为行列与跨度实际开发里最常用的场景是把数据库查询结果填充到网格中。TMS 的文档给了两种方式一种是逐格赋值Cells[col, row]另一种是绑定数据源DataSource。逐格赋值更灵活但数据量大时性能会明显下降绑定数据源更省事但控制列格式时需要在GetCellColor等事件里处理。我的经验是展示型界面用数据源绑定编辑型界面用逐格赋值再配合OnCanEditCell事件控制哪些列可编辑。网上关于“表格控件有没有像 Excel 那种筛选功能”的提问很多TAdvStringGrid 的处理方式是启用Filter相关属性点击列头右侧的小三角就能弹出筛选菜单底层逻辑会自动生成过滤条件。在 10.2 下这个功能实测稳定没有出现中文字段名筛选失效的问题。3.2 AdvEdit与日期时间输入组件做企业管理系统录入界面是最容易挨骂的地方。原生 TEdit 不带任何输入校验日期框 TDateTimePicker 的样式又特别死板。TMS 套件里的TAdvEdit、TAdvDateTimePicker可以从根上改善这个问题。TAdvEdit 的Filter属性可以直接限定输入类型比如只允许数字、只允许字母、允许小数。设置后控件内部会自动拦截非法字符不需要在 KeyPress 里手写判断逻辑。还有Validation相关的属性可以配置非空校验输入框失去焦点时自动高亮非法内容。AdvEdit1.Filter : afNumeric; // 只允许数字 AdvEdit1.MaxLength : 10; AdvEdit1.Validation.Enabled : True; AdvEdit1.Validation.Rules : [vrRequired]; // 必填项习惯写原生输入框的人可能会觉得这是多此一举但实际项目里客户的反感往往不是来自功能缺失而是“明明我都填对了你还提示我格式错误”。TMS 的这种内置拦截方式是在输入阶段就兜住了错误体验比后置校验平滑很多。另外TAdvDateTimePicker 可以自由设置显示格式、下拉日历中是否显示周数、禁用某个日期范围。我做排班系统时用它限制只能选择未来 30 天一行属性就搞定了。3.3 AdvChart图表展示TMS Component Pack 里还有一个常被低估的控件TAdvChartView。很多人遇到图表需求第一反应是引入 TeeChartDelphi 自带的图表控件。TeeChart 不是不好但在老版本里做交互式定制时比如鼠标悬停显示 Tooltip、动态增删曲线代码量偏大。TAdvChartView 的 API 设计更符合“属性驱动”的习惯。一个简单的曲线图核心代码如下var S: TAdvChartValueSeries; begin S : TAdvChartValueSeries.Create(AdvChartView1); S.Name : 温度; S.AddPoint(0, 20); S.AddPoint(1, 23); S.AddPoint(2, 21); S.Color : clRed; S.LineWidth : 2; AdvChartView1.XAxis.Automatic : True; end;这里要特别提醒TAdvChartView 的设计期交互非常友好直接在窗体上右键就能打开图表编辑器但如果你在运行时动态创建TAdvChartValueSeries必须记得给 Series 设置 Name否则图例区域会显示空白。我踩过一次坑导出 PDF 时发现图例名字全没了排查半天才发现是动态创建时忘了赋值。4. 许可、兼容性与高频问题排查4.1 无效的授权说明与注册问题TMS 控件在运行时会检查设计期包是否安装了有效的授权信息。如果你用的是评估版或者安装时没有正确应用注册文件运行时容易弹“无效的授权说明”之类提示。我的处理思路是首先检查TMSLicenseManager是否显示已激活其次确认安装时选择的 IDE 版本是否正确最后查看项目里是否存在多个 TMS 控件版本残留。这里说一个典型坑。比如你电脑上同时装了 10.2 和 10.3 两个版本的 RAD StudioTMS 控件包安装程序可能会把注册信息写进全局注册表而不是 IDE 专属区域。结果就是10.3 里编译通过10.2 里打开旧工程却提示无效授权。解决办法是先卸载所有 TMS 包再关掉所有 IDE 实例单独装一次目标版本的包。这也是为什么我建议在干净的 IDE 环境里做控件安装省得后面排查到怀疑人生。4.2 经典Delphi坑Cannot perform this operation on an open dataset搜索热词里多次出现“delphi cannot perform this operation on an open dataset”我不止一次在 TMS 控件场景里遇到这个问题。核心出错时机是在数据集打开状态下动态修改了与字段绑定相关的控件属性。AdvStringGrid 绑定了DataSource后如果代码里在FormCreate阶段先打开了查询然后又对表格执行了Clear或重新分配ColumnCount就会和数据集联动逻辑产生冲突报出这个错误。我的解决套路是// 先关闭数据集再修改表格结构 DataSource1.DataSet.Close; AdvStringGrid1.ColumnCount : 5; AdvStringGrid1.Columns[0].Header : 名称; DataSource1.DataSet.Open;核心思路是把“改结构”和“刷数据”分开操作。如果是为了清空表格显示不要直接调Clear用AdvStringGrid1.RemoveRows(1, AdvStringGrid1.RowCount - 1, True)更安全。4.3 控件安装后找不到按钮或组件面板不显示这个问题的出现频率也很高。装完 TMS 包后在已有窗体上拖放新控件组件面板里找到不或者重新编译工程后报“类 TAdvStringGrid not found”多半是 IDE 的.dproj工程中引用了旧版的 TMS 设计期包名称。v8.3.4.0 在 10.2 下的设计期包文件名是dclTMSVCL260.bpl旧版本可能是dclTMSVCL250之类。项目文件.dproj里记录了RuntimePackage的依赖升级后如果不清理旧记录IDE 在加载工程时会尝试找旧包导致组件面板加载失败。解决方法是记事本打开工程文件搜索TMS把和 TMS 设计期包相关的RuntimePackage记录手动清理然后重新加载。没有经验的话更稳妥的做法是新建一个空工程把原工程的全部.pas/.dfm文件复制进去重新引用新控件再从旧工程里把单元引用加回来。虽然多花十几分钟但能避免很多隐性污染。4.4 常见问题速查表问题现象常见原因处理建议运行时提示无效的授权授权信息被其他版本覆盖卸载所有 TMS 包后重装目标版本组件面板图标带问号设计期包 TMS 版本与 IDE 不匹配检查 BPL 后缀编号确认对应 10.264 位编译链接失败第三方库未提供 64 位支持暂时排除该控件保留 32 位使用表格清空时触发数据集异常数据集未关闭就操作表格结构先 Close 数据源再修改结构控件运行时显示为矩形块运行时包未进入搜索路径将 BPL 目录加入 PATH 或放到系统目录动态创建的 Series 图例空白未给 Series 设置 Name动态创建时显式赋值 Name 属性5. 实操心得与扩展思路最后分享几个我这段时间用下来的个人体会。第一控件包再强大也不要什么功能都依赖它。TMS Component Pack 是商业组件遇到项目需要分发部署时要确认授权模式是否允许。很多公司项目团队装完包后直接把 BPL 一起打包发给客户这其实存在商业合规风险。我在公司内部推动这套框架时专门和采购确认过部署授权建议有同样计划的团队尽早把这件事摆到台面上。第二关于版本升级节奏。TMS 官方几乎每年都会发新版本修复旧版 bug 和新增对 RAD Studio 新版本的适配。如果你被老项目绑定在 10.2没必要追着新版控件跑v8.3.4.0 这个版本在 10.2 下已经很成熟了。但有一点值得注意如果未来要把项目迁移到 Delphi 11 或 12TMS 控件包的升级动作要提前做兼容性测试。我可以明确说直接在新版本 IDE 里打开旧工程然后一股脑重新编译大概率会报一堆类型不兼容错误到时候再回头来改就晚了。第三关于学习成本。如果你刚开始接触 Delphi可能觉得“第三方控件”是个又老又土的话题。但实际你去看招聘需求和项目维护市场Delphi 的老项目存量一点都不小。入门阶段把 TMS 这类成熟控件包用熟性价比非常高。它里面很多设计思路比如属性驱动、事件分离、设计期编辑器都继承了 VCL 的核心哲学。掌握了这套逻辑之后你再去看其它 VCL 控件包基本就是“翻文档找属性”的事不用从头学。我自己的学习路径是先用 TAdvStringGrid 做了一个单据录入界面再慢慢扩展到日期、下拉框、图表。刚开始只会在设计期拖控件、改属性后来才逐步在代码里动态创建控件、处理事件。这个过程里最有价值的部分是逼着自己去读 TMS 附带的帮助文档和 Demo 源码。它的 Demo 工程非常多几乎每个控件都有完整示例遇到问题先跑一遍 Demo比自己瞎试强得多。这个控件包后续还可以怎么扩展我目前计划做的事是把项目中的运行日志面板换成 TMS 的TAdvRichEditor用它做彩色日志高亮展示再往后想把报表导出统一到 TAdvStringGrid 的SaveToXLSX方法上替换掉现在手工拼 CSV 的老代码。每动一步都要在 10.2 环境下回归测试一遍。老项目的乐趣就在这上面能跑几十年不变的业务逻辑下面也能长出新的交互体验。对做 Delphi 维护开发的人来说v8.3.4.0 这套 TMS 包是值得仔细研究的好工具。本文还有配套的精品资源点击获取
返回列表