资讯动态

TeeChart Pro 2023.38源码版实战:VCL/FMX编译集成与跨平台部署指南

发布时间:2026/9/8 2:33:43 来源:尧图企业网站定制
简介TeeChart 是 Steema 公司出品的专业图表组件库这款 2023.38 版本源码包面向使用 Delphi、CBuilder 的 VCL 与 FireMonkey 开发者可用于构建 Windows 及跨平台数据可视化应用。包内共包含 2000 个文件以 Pascal 源码492 个 pas、Delphi 包工程378 个 dpk、FMX 界面文件212 个 fmx和资源文件425 个 res为主另有大量位图、DFM 表单及若干 C 工程文件整体压缩后约 21.02MB。已有 277 人学习/下载该资源。这份源代码不仅提供完整的图表绘制能力如折线图、柱状图、饼图、3D 地图等还允许开发者深入阅读源码、针对业务场景自定义组件行为并可借助 VCL/FMX 双框架实现跨平台复用。更难得的是源码内含多种编程模型的 API 接口与事件驱动支持方便与数据库、Web 服务等系统对接包含按 IDE 版本划分的包工程组织便于快速定位与集成是图表类应用开发与二次集成的实用参考资料。 这套TeeChart Pro VCL/FMX 2023.38源码版我陆陆续续用了小半年期间从Delphi 11迁移到Delphi 12再从纯VCL项目扩展到FMX跨平台项目踩的坑和摸出来的门道都凑齐了。这篇就把我实际编译、集成、部署这套源码版的过程完整写出来重点放在“源码版和安装版到底差在哪”“VCL和FMX两套分支该怎么对待”“编译集成时哪些环节最容易翻车”这三件事上给正准备入手的同行一个参考。1. 为什么我盯上2023.38这个源码版先说背景。我维护的是一款工业数据采集与监控的桌面客户端Windows端偏多但这两年陆续有客户要macOS和iPad端的演示版。图表是产品里最核心的展示模块历史曲线、实时趋势、频谱分布、仪表盘都离不开。早期用的是TeeChart标准安装版功能完全够用问题出在几个特殊需求上。第一个需求是自定义序列类型。项目里有一种特殊的“质量标记条”需要在时间轴曲线上叠加不同颜色、不同透明度的区块用来标注数据有效区间。标准版里没有现成的序列类型文档里也没有对应扩展点。安装版是编译好的bpl想改内部行为基本没门。第二个需求是跨平台统一交互。Windows上用右键框选缩放客户希望iPad上能用双指手势做出同样效果这需要在FMX的Touch事件链里对Chart底层做定制。没有源码很多事就只能停留在“看文档猜实现”的阶段。第三个原因比较实际团队里不止一个IDE版本。有人还在Delphi 10.4有人已经升到RAD Studio 11还有人刚装了12 Athens的预览版。安装版每次要等官方出对应IDE版本重新编译的安装包版本一多就成了灾难。源码版自己拿过来编译一套所有人在各自IDE里直接引用省掉大量等待时间。所以我的建议是如果你只是做常规业务报表、仪表盘安装版完全够用没必要买源码版但如果你需要改控件行为、要跨IDE版本维护、要深入FMX渲染细节源码版的价值是实打实的。2023.38这个版本号意味着它是2023年的第38个build对应的IDE支持已经覆盖了RAD Studio 11.3和12.0正好站在Delphi 12普及的前夜属于比较稳定的一个版本节点。2. 版本号背后2023.38在VCL和FMX两侧的真实改动拿到手第一件事翻Release Notes。Steema的版本号规律很简单年份当年build序号2023.38就是2023年第38次构建。这不同于传统的TeeChart X.0命名方式但本质一样。Release Notes里关于FMX侧的改动比VCL多这是这两年的明显趋势——Steema明显把火力集中在了跨平台这边。FMX侧几个主要变化值得单独说。渲染管线对HiDPI的适配比以前好得多。VCL里chart在不同DPI显示器之间拖动字体和线宽偶尔会发虚这个问题根源是VCL的GDI/GDI在Per-Monitor DPI下的固有毛病控件层能做的有限。FMX是矢量渲染体系TChart在Windows和macOS的高分屏上清晰度表现都很稳2023.38又修了几个在Linux下Canvas字体平滑的细节。新增和增强的序列类型。FMX侧对TBoxPlot、TVolumeSeries这类偏金融分析的序列做了渲染优化同时把TChart的Legend交互增强同步到了FMX分支。VCL侧则重点在TChartListBox、TChartGrid这类附属控件的运行时行为校正。具体到我自己项目里最直观的感受是TColorGrid在FMX下大量数据点时的重绘速度比之前快了。Axis和Tool框架的同步补丁。好几个修的是Axis标签自动旋转的角度计算、TAnnotationTool在FMX下点击命中区域不准的问题。FMX的命中测试和VCL的Windows消息机制不同很多Tool在VCL下正常、一跑到FMX就偏2023.38在这里修了一大批类似的差异。VCL侧改动相对少主要集中在两类一类是编辑器TeeChart Editor界面在高DPI下的显示另一类是对Delphi 11.3和12.0新版编译器的兼容性修正。RAD Studio 12对String的处理有底层变化部分控件源码在此前版本下会编译警告2023.38把这些都清理干净了。我的判断是2023.38真正有价值的更新在FMX侧VCL侧维护性质更多。所以如果你的主力平台是Windows VCL从旧版本升级过来体感不会太剧烈如果做FMX跨平台这个版本确实值得投入。3. 拿到源码先别急着编译目录结构和包依赖源码版解压后不像安装版那样自动注册控件到IDE它是一堆源文件和工程文件。有人第一次打开源码包看到十几个dpk文件直接懵了其实结构很清晰。核心目录大致是这样Sources\VCLVCL分支的源码和运行时包Sources\FMXFMX分支的源码和运行时包Sources\Editor图表编辑器的源码Packages\各个版本的dpk/dproj文件Demo\官方示例工程编译顺序有讲究。TeTree、TeeChart的运行时包Runtime Package必须先编译然后才是设计时包Design-Time Package。设计时包是负责让控件出现在IDE工具箱里的那一层它依赖运行时包。有人上来直接打开设计时包编译报一堆找不到单位的错误就是因为运行时包还没编。推荐顺序是先编译TeeChartPro_VCL_Run.dpk运行时再编译TeeChartPro_VCL_Design.dpk设计时。FMX侧同理把VCL换成FMX关键词即可。编译过程中不允许出现错误如果编译失败绝大多数情况是因为已有的Delphi环境里装了老版本的TeeChart路径搜索顺序冲突。具体编译流程我整理一下打开RAD StudioTools - Options - Environment Options - Delphi Options - Library。把源码里的Sources\VCL、Sources\FMX、Sources\Editor三个路径加到Library Path中。打开Packages目录下对应的dproj文件。Delphi 11环境下选TeeChartPro_VCL_Run.dproj右键编译。运行包编译成功后编译设计时包。IDE提示是否安装设计时包选Install工具箱里就能找到TChart组件。FMX分支完全重复一遍两个分支可以共存不存在互相覆盖的问题。这里说一个我踩过的坑。如果你同时装了Delphi 11和Delphi 12在Delphi 12里编译的包默认放在C:\Users\xxx\Documents\Embarcadero\Studio\23.0这个用户目录下Delphi 12是23.0Delphi 11是22.0两个版本各自独立。但Library Path如果沿用旧的很可能把11的编译产物指给12用结果就是IDE能识别控件但启动时反复弹“Package xxx is not found”或者版本不匹配的错误。所以每个IDE版本都要单独配Library Path指向它自己编译出来的bpl目录。4. VCL和FMX的图表差异不是换个壳那么简单很多人以为TeeChart VCL和FMX只是API一致、底层换个渲染引擎而已。实际操作下来发现两套分支的差距比想象中大。API层面确实照顾得很好大部分代码可以直接复制但交互层、性能层、事件触发的时机都藏着自己的脾气。渲染底层的差异是根本。VCL的TChart默认走GDI渲染在Windows上确实稳定但是位图缩放、Alpha混合这些和现代UI的需求有明显代差。FMX侧把所有绘图操作都建立在FireMonkey的Canvas抽象上因此在Windows、macOS、iOS、Android上的渲染结果高度一致。也就是说同样的Chart在Windows上设置的颜色、字体到macOS上视觉还原度比VCL高得多。交互事件链完全不是一回事。VCL的鼠标事件是基于Windows消息的OnMouseDown、OnMouseMove、OnMouseUpTChart自己的Zoom和Scroll工具也建立在Mouse事件之上。但FMX里没有Windows消息触摸和鼠标统一走Gesture和Mouse事件而且事件是冒泡式的从最上层控件往父级传递。TChart在FMX里的Zoom/Scroll工具如果不显式配置在Windows开发机上用鼠标灵活得很一交叉编译到iPad上就完全没反应。FMX里的交互要换成TeeChart的Touch工具代码大概是这个样子uses TeeTouchTools; var TouchZoom: TTeeTouchZoom; TouchScroll: TTeeTouchScroll; begin TouchZoom : TTeeTouchZoom.Create(nil); TouchZoom.Panel : Chart1; Chart1.Tools.Add(TouchZoom); TouchScroll : TTeeTouchScroll.Create(nil); TouchScroll.Panel : Chart1; Chart1.Tools.Add(TouchScroll); end;加上这两个Touch工具iPad上用双指缩放和平移就顺了。类似的差异还体现在序列的点选高亮VCL用OnMouseMove判断序列邻近值FMX要用TTeeHitTest工具和Tooltip的弹出位置上。性能层面的差异集中在数据量大时。VCL因为是GDI刷新大数据量曲线时CPU占用偏高FMX的Canvas在Windows上走Direct2D的路径大点数场景下明显更省CPU。但Android和Linux上各有自己的软件渲染实现又没有Windows那么高效。所以搞跨平台要从一开始就把数据点做降采样不能指望控件层万能。一个容易被忽略的细节是Font和DPI。VCL的Font单位是像素在96DPI下设计好的Chart标题换到150DPI的电竞屏上就变得很小。FMX的Font用的是point尺寸靠Canvas的Scale自动适配所以在不同DPI显示器之间切换时视觉比例更稳定。2023.38源码里对FMX侧TextShape的字体测量做了修正小字号中文标题的模糊问题有明显改善。如果你在VCL里被多分辨率显示适配折腾过FMX这套方案会让你省心不少。5. 编译和集成中的实战排坑记录这几条都是我真实踩过的按影响程度排个序。坑一工具箱里找不到控件但编译不报错。这是典型的设计时包没装或者装错了版本。很多人只编译了Runtime包就往IDE里用结果代码能跑因为运行时引用没问题但工具箱里始终不显示。解决方式是检查Project Manager里Design-Time包是否标记为Runtime only要在Options里把Usage改成Design-Time。坑二Delphi 12下编译Design包时提示“Unit xxx was compiled with a different version of xxx.Types”。这个问题环境清理就能解决。原因是IDE搜索路径里混入了Delphi 11编译生成的dcu12去加载时发现类型版本不一致。把用户BPL目录、DCP目录、DCU目录全部清理干净重新编译一遍就正常。坑三FMX分支的TChart在Android真机上初始化崩溃。崩溃停在TChart.Create原因多半是FMX的Canvas在Android平台上需要一个TForm作为上下文而你在Form的构造事件里过早创建了Chart此时Canvas还没准备好。解决办法是把Chart创建从FormCreate挪到FormActivate等FMX的Platform完全初始化之后再建。坑四和TMS、DevExpress等第三方控件的bpl冲突。这是因为各种控件都自带一套bpl版本链各不相同加载顺序不对就冲突。解决办法是把TeeChart的运行时包在项目选项里改成“Runtime Packages”中默认不打包Build with runtime packages取消勾选让依赖静态链接进去避免和第三方运行包掐架。代价是体积变大但稳定性换来的是值得。如果是纯FMX项目根本不用勾选运行时包因为FMX默认就是全部静态编译。坑五VCL项目升级到Delphi 12后个别Chart页面在程序退出时偶发Access Violation。这个大概率是析构顺序问题。2023.38源码里TChart的析构会释放Tools和Series如果Chart和某个Tool的拥有者Owner有父子关系释放顺序不对就崩。稳妥做法是创建Tool和Series时指定Owner为Chart自身而不是Form确保它们随Chart一起释放。这些坑让我养成一个习惯每次切换IDE版本或升级第三方控件都花半小时重建一个干净的测试项目只放一个Chart和一个Button跑一遍创建、赋值、保存图片、释放的完整流程。看起来原始但比在一个庞大的项目里排查问题高效太多了。6. 部署经验授权检查、跨平台打包和序列数据刷新的实测部署这块有几个点值得单独说都是实际项目里容易卡壳的地方。授权检查机制。TeeChart Pro源码版编译出来的程序首次启动时会查找Steema License。开发机上装了IDE注册表里有授权信息跑起来没问题但部署到客户机器上第一次运行会进入未授权模式功能受限必须调用序列号注册代码。uses TeeLicensing; begin TeeSetLicense(YOUR_REGISTRATION_CODE); end;这段代码要放在程序启动的最早阶段最好在Application.Initialize之后、MainForm创建之前。很多人放在FormCreate里在极少数机器上会因为加载顺序问题导致注册失败。注册成功后会生成一个本地校验文件之后不再重复检查。FMX跨平台打包额外注意。iOS上如果用了TChart的PNG导出功能要确保链接了FMX的图像编码库Android上如果图表里用了外部字体字体文件必须打进Assets目录并在Chart的Font设置里用TFontFile.Create加载。否则中文标注在Android上会是方块。大数据量实时刷新。项目里要做实时曲线每秒进来500到1000个数据点一开始用Series.AddXY逐点添加界面肉眼可见地卡顿。后面改成批量数组赋值性能差别巨大var XArray, YArray: TDoubleDynArray; begin // 预先填充XArray、YArray Series1.BeginUpdate; try Series1.SetXValues(XArray); Series1.SetYValues(YArray); finally Series1.EndUpdate; end; end;BeginUpdate和EndUpdate在VCL和FMX分支里都适用但要记住BeginUpdate后一定要在Finally里成对EndUpdate否则图表会停留在冻结状态。另外实时曲线建议配上TTeeZoomBand这类范围缩放工具把可视窗口控制在一段时间内不然序列无限增长内存迟早吃满。多序列同步显示时的优化。如果一条轴上叠了十几条曲线鼠标移动时Legend要高亮对应序列默认实现是遍历所有序列的所有点判断命中序列一多就掉帧。这里可以直接开启Source的UseExtendedCoordinate或者自行在MouseMove里只对可见序列做距离判定配合Series1.Marks.Visible : False关掉不需要的标注交互流畅度会明显提升。这套源码版我目前同时跑在Delphi 11.3和12.0两个IDE里VCL分支负责Windows正式版FMX分支维护macOS和iPad演示版。前面提到的坑大多集中在首次编译的头两周摸清包依赖和API差异后日常开发体感和普通控件库没区别。尤其到了Delphi 12FMX在高分屏和渲染性能上的提升是实打实的值得把老项目逐步迁过去。如果你也是从安装版切到源码版建议拿出一两天时间专门编译、跑通示例项目再动业务代码这笔时间花得值。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价