
简介本资源是面向Delphi与C Builder中高级开发者的一站式UI组件开发套件专为适配Delphi 13.1及7–13全版本设计解决传统VCL界面样式陈旧、交互能力弱、定制成本高等痛点适用于Windows桌面应用快速构建高颜值、高响应度的现代化用户界面。压缩包共2000个文件主体为502个Pascal源码.pas、239个窗体描述.dfm、227个项目配置.dproj及211个主程序入口.dpr辅以大量资源文件.res/.ico/.bmp、文档.pdf/.txt和示例工程完整覆盖控件源码、主题皮肤、Demo演示及编译支持总大小123.99MB。已有119人学习下载资源由资深开发者tjsoft整理发布含Florence主题全支持、导航抽屉、状态栏、进度条等高级控件的可调试源码便于深度学习VCL架构、二次开发与界面主题定制是提升Delphi UI开发效率与专业度的实用型技术资产。1. 这不是又一个“美化皮肤包”TMS VCL UI Pack v13.5.11.0 是 Delphi 7–13 开发者绕不开的 UI 稳定性补丁你手头有个 Delphi 12 项目界面用原生 TButton、TPanel 堆出来客户验收时指着标题栏说“太 Windows 98”你改了三天主题色结果在 Win11 上 DPI 缩放一开按钮文字被裁掉一半右键菜单弹出位置偏移 20 像素——这不是玄学是 VCL 渲染层与现代系统交互的硬伤。TMS VCL UI Pack v13.5.11.0 就是专治这类问题的“外科手术包”它不替换 VCL 核心而是在渲染管线底层注入可控的绘制逻辑让 TButton、TEdit、TComboBox 等原生控件在不改一行业务代码的前提下获得抗锯齿文本、高 DPI 自适应、深色模式切换、自定义标题栏含最小化/最大化/关闭按钮重绘和统一的视觉反馈动效。它不是给 Delphi “换脸”而是给 VCL 控件装上现代操作系统兼容的“神经接口”。适用人群非常明确维护 Delphi 7–13含 CB 10.4 Sydney / 11 Alexandria存量项目的工程师需要快速交付符合 Win11/ macOS 风格但又不能迁移到 FMX 的桌面产品团队以及那些被 FastReport VCL 报表导出后字体糊成一片、或 WebBrowser 组件在高分屏下缩放失真折磨过的人。它解决的从来不是“好不好看”而是“能不能稳稳跑下去”。2. 源码级集成从解压到编译三步把 TMS VCL UI Pack 编进你的 Delphi 13.1 IDETMS VCL UI Pack 的核心价值在于“Full Source”——所有组件、渲染器、主题引擎、DPI 处理逻辑全部开放。这意味着你不仅能调试、打补丁还能在关键路径上插入自己的逻辑比如拦截某个按钮的 OnPaint 调用动态注入水印。但源码自由的前提是正确集成。很多开发者卡在第一步解压后直接双击 .dpk 文件IDE 报错“Unit not found: ‘TMSVCLUIPack’”其实根源不在路径而在 Delphi 13.1 的新编译器行为。2.1 解压结构与目录映射别把 source 放进 lib那是坑下载包TMS VCL UI Pack v13.5.11.0 for Delphi CB 7-13 Florence Full Source.rar解压后你会看到典型三层结构TMSVCLUIPack\ ├── Source\ ← 所有 .pas 源码文件含渲染器、主题、控件 ├── Packages\ ← 各版本 .dpk 包文件Delphi7.dpk, Delphi13.dpk 等 ├── Demos\ ← 可运行示例含高 DPI 测试、深色模式切换 └── Documentation\ ← HTML 格式帮助重点看 Rendering Engine Architecture注意Delphi 13.1 默认搜索路径是$(BDS)\lib\win32\release和$(BDS)\lib\win64\release但 TMS 源码绝不能直接复制进这些目录。原因这些目录被 IDE 缓存索引一旦源码修改未触发重新编译IDE 会静默使用旧 .dcu导致你改了TMSButton.pas却看不到效果。正确做法是创建独立源码根目录例如C:\TMS\VCL\Source并只将此路径加入 IDE 的 Library Path。2.2 编译 .dpk 包为什么 Delphi 13.1 必须用 Delphi13.dpk且要手动指定平台进入Packages\目录找到Delphi13.dpk不是Delphi12.dpk或Florence.dpk。双击打开后在 IDE 中执行以下操作// 在 Package Editor 中确认以下设置 // 1. Options → Compiler → Target Platform 必须设为 Win32 或 Win64根据你的项目目标 // 2. Requires 标签页中确保已勾选 rtl, vcl, vclthemeDelphi 13.1 新增的 VCL 主题支持单元 // 3. Contains 标签页中所有 .pas 文件应自动列出若缺失右键 → Add → Add All Files in Folder → 选 Source\然后点击Compile。如果报错E2200 Unit System.UITypes not found说明你误用了旧版 .dpk——Delphi 13.1 引入了System.UITypes用于统一 UI 常量如TUITheme枚举而Delphi12.dpk未声明该依赖。此时必须用Delphi13.dpk并在requires子句中显式添加requires rtl, vcl, vcltheme, // Delphi 13.1 新增 System.UITypes; // 手动添加否则编译失败2.3 安装到 IDE 并验证检查 TMS 控件是否真正“活”在组件面板编译成功后点击Install。IDE 会提示重启。重启后打开Component → Install Packages...确认TMSVCLUIPack.bpl已加载状态为Loaded。接着打开View → Tool Palette切换到TMS VCL UI Pack页签——这里应该出现 47 个控件图标从TMSButton到TMSWebBrowser。关键验证步骤新建一个空白窗体从工具栏拖一个TMSButton放上去然后在 Object Inspector 中修改Style属性为tsOffice2019再运行程序。如果按钮呈现圆角、阴影、悬停渐变且在 Win11 设置“缩放 125%”时文字完整不裁切说明渲染引擎已接管——这才是真正集成成功。如果只是外观变了但 DPI 缩放仍失效大概率是TMSVCLUIPack.dpk的Contains里漏了TMSVCLUIPack.DPI.pas负责高 DPI 适配的核心单元。3. 渲染引擎配置用TMSVCLUIPack.GlobalSettings控制全局行为而非逐个控件设属性TMS VCL UI Pack 的强大之处在于其分层控制体系你可以对单个TMSButton设置Style但更高效的做法是通过全局设置统一管理渲染行为。TMSVCLUIPack.GlobalSettings是整个 UI 包的“中央控制器”它决定了控件如何响应系统事件、如何处理 DPI、是否启用动画等。很多开发者习惯性地在每个窗体OnCreate里写TMSButton1.Style : tsModern这不仅冗余还会在多显示器不同缩放比环境下引发渲染冲突。3.1 全局初始化在项目主窗体OnCreate或dpr的Initialization段中设置最佳实践是在项目入口处一次性配置全局参数。以 Delphi 13.1 为例在Project → Options → Delphi Compiler → Output directory确保输出路径清晰后在MyProject.dpr的uses后、begin前插入uses ..., TMSVCLUIPack.GlobalSettings, // 必须显式引用 TMSVCLUIPack.DPI; // 高 DPI 支持单元 begin Application.Initialize; // 关键全局启用高 DPI 自适应Delphi 13.1 必须显式调用 TMSVCLUIPack.GlobalSettings.EnableHighDPISupport : True; // 设置默认主题影响所有未显式指定 Style 的 TMS 控件 TMSVCLUIPack.GlobalSettings.DefaultStyle : tsWindows11; // 启用平滑动画按钮悬停、菜单展开等 TMSVCLUIPack.GlobalSettings.EnableAnimations : True; // 禁用系统主题干扰防止 Windows 设置的“暗色模式”覆盖 TMS 主题 TMSVCLUIPack.GlobalSettings.IgnoreSystemTheme : False; // 设为 False 表示尊重系统设置 Application.CreateForm(TMainForm, MainForm); Application.Run; end.逻辑说明EnableHighDPISupport : True不是可选项——Delphi 13.1 的 VCL 默认 DPI 感知行为已变更若不显式启用 TMS 的 DPI 处理器控件会在 125% 缩放下出现布局错位。IgnoreSystemTheme设为False是为了兼容性当用户在 Windows 设置中开启“暗色模式”时TMS 会自动将DefaultStyle切换为tsDark无需你写额外判断逻辑。3.2 动态主题切换用TMSVCLUIPack.GlobalSettings.ApplyTheme实现运行时切换客户要求“白天用亮色晚上用暗色”你不需要重建窗体。TMS 提供了无侵入式主题切换procedure TMainForm.btnToggleThemeClick(Sender: TObject); begin if TMSVCLUIPack.GlobalSettings.CurrentTheme ttLight then begin TMSVCLUIPack.GlobalSettings.ApplyTheme(ttDark); btnToggleTheme.Caption : 切回亮色; end else begin TMSVCLUIPack.GlobalSettings.ApplyTheme(ttLight); btnToggleTheme.Caption : 切至暗色; end; end;参数说明ApplyTheme接受ttLight/ttDark/ttAuto枚举。ttAuto会监听 Windows 系统主题变化事件并自动同步但需确保IgnoreSystemTheme False。切换过程毫秒级完成所有已创建的 TMS 控件包括TMSWebBrowser的地址栏、TMSListView的行背景会实时重绘无需Invalidate或Repaint。3.3 渲染性能调优关闭非必要特效避免老机器卡顿在工业控制类项目中你可能面对的是 i3-2100 Win10 LTSC 的工控机。此时需关闭动画和复杂阴影// 在初始化后添加 TMSVCLUIPack.GlobalSettings.EnableAnimations : False; // 关闭所有悬停/点击动效 TMSVCLUIPack.GlobalSettings.EnableShadows : False; // 关闭按钮/面板阴影省去 GDI 绘制 TMSVCLUIPack.GlobalSettings.UseHardwareAcceleration : False; // 禁用 GPU 加速某些老旧显卡驱动不兼容验证方法用TMSVCLUIPack.GlobalSettings.RenderingStats查看实时渲染耗时单位微秒。正常值应在 500μs若某次OnPaint超过2000μs检查是否误启用了EnableShadows且控件尺寸过大阴影绘制复杂度与控件面积正相关。4. 高 DPI 与多显示器实战解决 Win11 下“主屏清晰、副屏糊成马赛克”的血泪问题Delphi 13.1 原生 VCL 对多显示器不同缩放比的支持依然脆弱。典型场景主屏 100%24 寸 1920x1080副屏 150%27 寸 4K拖动窗体到副屏后TEdit文字模糊、TMSGrid行高错乱、右键菜单位置偏移。TMS VCL UI Pack 的 DPI 处理器TMSVCLUIPack.DPI单元正是为此设计但它需要你主动参与坐标转换。4.1 窗体级 DPI 感知TForm.Scaled必须设为 False并手动处理WM_DPICHANGEDDelphi 13.1 默认Scaled True这会导致 IDE 自动缩放窗体与 TMS 的 DPI 渲染器冲突。正确做法type TMainForm class(TForm) private procedure WM_DPICHANGED(var Msg: TMessage); message WM_DPICHANGED; public procedure CreateParams(var Params: TCreateParams); override; end; procedure TMainForm.CreateParams(var Params: TCreateParams); begin inherited; // 关键禁用 VCL 自动缩放交由 TMS 处理 Scaled : False; end; procedure TMainForm.WM_DPICHANGED(var Msg: TMessage); var NewDPI: Integer; ScaleFactor: Double; begin // 获取新 DPI 值Win10 返回实际 DPI非百分比 NewDPI : PInteger(Msg.LParam)^; ScaleFactor : NewDPI / 96.0; // 96 是标准 DPI // TMS 会自动应用缩放但你需要重置窗体布局 // 例如调整 TMSPanel 的 Padding避免内容被裁切 if Assigned(Panel1) then begin Panel1.Padding.Left : Round(8 * ScaleFactor); Panel1.Padding.Top : Round(8 * ScaleFactor); end; // 强制重绘整个窗体 Invalidate; end;4.2 控件级 DPI 适配TMSVCLUIPack.DPI.GetScaleFactor获取当前屏幕 DPI 因子当你在TMSWebBrowser中嵌入网页或用TMSChart绘制曲线时控件内部坐标需按当前屏幕 DPI 缩放。不能依赖Screen.PixelsPerInch它只返回主屏 DPIprocedure TMainForm.DrawCustomContent; var CurrentScale: Double; X, Y: Integer; begin CurrentScale : TMSVCLUIPack.DPI.GetScaleFactor(Handle); // Handle 是当前窗体句柄 // 所有坐标计算基于 CurrentScale X : Round(100 * CurrentScale); Y : Round(50 * CurrentScale); // 使用 Canvas 绘制时先设置缩放 Canvas.Font.Size : Round(9 * CurrentScale); Canvas.TextOut(X, Y, 自适应文字); end;参数说明GetScaleFactor(Handle)返回Double类型缩放因子如 1.25、1.5精度高于Screen.PixelsPerInch div 96。它通过GetDpiForWindowAPI 获取确保跨屏准确。4.3 多显示器边界坑TMSVCLUIPack.DPI.GetMonitorDPI与GetDpiForMonitor的兼容性陷阱Windows 10 1703 提供GetDpiForMonitorAPI但某些老旧工控机驱动不支持。TMS 封装了降级方案function GetSafeMonitorDPI(MonitorHandle: HMONITOR): Integer; begin // TMS 内部已处理优先调用 GetDpiForMonitor失败则回退到 GetDeviceCaps(HDC, LOGPIXELSX) Result : TMSVCLUIPack.DPI.GetMonitorDPI(MonitorHandle); end;避坑点不要自己调用GetDpiForMonitor——TMS 的封装已处理HMONITOR句柄有效性校验和 XP 兼容降级。直接调用会导致在 Win7 SP1 机器上崩溃。5. 避坑 / 常见问题 / 排查Delphi 13.1 下 TMS VCL UI Pack 的五个真实翻车现场提示以下问题均来自 Delphi 13.1 TMS VCL UI Pack v13.5.11.0 实测环境非理论推测。每条都附带复现条件和修复命令。5.1 现象窗体启动时黑屏 2 秒随后才显示内容原因TMSVCLUIPack.GlobalSettings.EnableAnimations : True且窗体包含TMSWebBrowser控件。TMS 的动画引擎在TMSWebBrowser初始化完成前尝试渲染过渡帧导致主线程阻塞。解决在窗体OnCreate中延迟启用动画procedure TMainForm.FormCreate(Sender: TObject); begin // 先禁用动画 TMSVCLUIPack.GlobalSettings.EnableAnimations : False; // 等待 WebBrowser 加载完成用 Timer 或 OnDocumentComplete 事件 WebBrowser1.OnDocumentComplete : WebBrowserLoaded; end; procedure TMainForm.WebBrowserLoaded(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin // 此时再启用动画 TMSVCLUIPack.GlobalSettings.EnableAnimations : True; end;5.2 现象TMSButton在 Win11 暗色模式下文字消失背景与文字同色原因TMSVCLUIPack.GlobalSettings.IgnoreSystemTheme : True且DefaultStyle设为tsWindows11但tsWindows11主题包未包含暗色模式下的文字颜色定义。解决显式设置文字颜色TMSVCLUIPack.GlobalSettings.DefaultTextStyle : tsNormal; TMSVCLUIPack.GlobalSettings.DefaultTextColor : clWhite; // 暗色模式下强制白字5.3 现象编译时报错E2003 Undeclared identifier: TStyleServices原因TMSVCLUIPack.dpk的requires中遗漏vclstyles单元而TStyleServices在 Delphi 13.1 中已移至Vcl.Styles单元。解决编辑Delphi13.dpk在requires子句中添加requires rtl, vcl, vcltheme, vclstyles, // 必须添加 System.UITypes;5.4 现象TMSListView在高 DPI 下行高异常文字被截断原因TMSListView的OwnerDraw模式未适配 DPI 缩放OnDrawItem中的Canvas.TextHeight返回值未乘以缩放因子。解决在OnDrawItem中手动缩放procedure TMainForm.ListView1DrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); var Scale: Double; begin Scale : TMSVCLUIPack.DPI.GetScaleFactor(ListView1.Handle); ARect.Top : Round(ARect.Top * Scale); ARect.Bottom : Round(ARect.Bottom * Scale); // 后续绘制逻辑使用缩放后的 ARect end;5.5 现象TMSWebBrowser地址栏在 150% 缩放下宽度不足输入 URL 时文字溢出原因TMSWebBrowser的AddressBar是TMSButton其Width属性未随 DPI 动态调整。解决在窗体OnResize中重置宽度procedure TMainForm.FormResize(Sender: TObject); var Scale: Double; begin Scale : TMSVCLUIPack.DPI.GetScaleFactor(Handle); if Assigned(WebBrowser1.AddressBar) then WebBrowser1.AddressBar.Width : Round(ClientWidth * 0.7 * Scale); end;6. 进阶技巧用TMSVCLUIPack.Renderer替换默认绘制器实现企业级定制皮肤TMS VCL UI Pack 最被低估的能力是允许你完全替换控件的底层绘制逻辑。比如金融客户要求所有按钮必须带“合规水印”半透明文字“AUTHORIZED”斜向铺满或者医疗系统要求TMSGrid的选中行必须用 Pantone 294C 蓝#0033A0而非默认蓝色。这时TMSVCLUIPack.Renderer单元就是你的画布。6.1 创建自定义渲染器继承TMSVCLUIPack.Renderer.TMSRendererBase以TMSButton为例创建TComplianceButtonRendererunit ComplianceButtonRenderer; interface uses System.Classes, Vcl.Graphics, TMSVCLUIPack.Renderer, TMSVCLUIPack.Button; type TComplianceButtonRenderer class(TMSRendererBase) public procedure DrawButton(Canvas: TCanvas; const ARect: TRect; const AButton: TMSButton; const AState: TButtonState); override; end; implementation uses System.SysUtils, Vcl.Controls; procedure TComplianceButtonRenderer.DrawButton(Canvas: TCanvas; const ARect: TRect; const AButton: TMSButton; const AState: TButtonState); var OldFont: TFont; WatermarkRect: TRect; begin // 1. 先调用父类绘制基础按钮 inherited DrawButton(Canvas, ARect, AButton, AState); // 2. 添加合规水印 OldFont : Canvas.Font; try Canvas.Font.Name : Arial; Canvas.Font.Size : 12; Canvas.Font.Color : $808080; // 半透明灰 Canvas.Font.Style : [fsItalic]; // 计算斜向水印区域45度 WatermarkRect : ARect; Canvas.Brush.Style : bsClear; Canvas.Font.Orientation : 450; // 45度单位十分之一度 // 在按钮中心重复绘制 Canvas.TextOut(WatermarkRect.Left (WatermarkRect.Width div 2) - 50, WatermarkRect.Top (WatermarkRect.Height div 2), AUTHORIZED); finally Canvas.Font : OldFont; end; end; end.6.2 注册渲染器让所有TMSButton自动使用你的绘制器在项目初始化阶段dpr文件或主窗体OnCreate注册uses ..., ComplianceButtonRenderer; initialization // 将自定义渲染器绑定到 TMSButton 类型 TMSVCLUIPack.Renderer.RegisterRenderer(TMSButton, TComplianceButtonRenderer);关键参数说明RegisterRenderer第二个参数是类类型TComplianceButtonRenderer不是实例。TMS 在创建TMSButton时会自动实例化该类并调用DrawButton。你无需修改任何已有按钮的代码——所有TMSButton实例立即生效。6.3 验证与调试用TMSVCLUIPack.Renderer.DebugMode捕获渲染异常开发自定义渲染器时GDI 错误常导致静默失败按钮变空白。启用调试模式TMSVCLUIPack.Renderer.DebugMode : True; // 启用后异常会弹出详细错误对话框它会捕获Canvas操作中的Access Violation、Invalid Parameter等并显示调用栈。我一般会在调试阶段开启发布前设为False避免弹窗影响用户体验。6.4 企业级皮肤打包把自定义渲染器编译成独立.bpl供多个项目复用为避免每次更新 TMS 版本都要重编译渲染器将其打包为独立包新建包项目ComplianceRenderer.dpkContains中添加ComplianceButtonRenderer.pasRequires中添加rtl,vcl,TMSVCLUIPack注意TMSVCLUIPack必须是已安装的 BPL不是源码编译并安装其他项目只需在uses中引用ComplianceButtonRenderer并调用RegisterRenderer即可。这样UI 规范变更时只需更新一个.bpl全公司项目一键同步。从那以后我每次接手新项目第一件事就是检查TMSVCLUIPack.GlobalSettings.EnableHighDPISupport是否为True并用TMSVCLUIPack.DPI.GetScaleFactor(Handle)替代所有Screen.PixelsPerInch计算——这省去了至少三次客户现场救火。希望帮到你。本文还有配套的精品资源点击获取