VCL组件DevExpress VCL图表控件中文指南 - 如何实现值标签自定义?

VCL组件DevExpress VCL图表控件中文指南 - 如何实现值标签自定义?
DevExpress VCL拥有230个VCL界面控件、40个自定义设计的VCL应用主题它能帮助您创建优异的用户体验提供高影响力的业务解决方案并利用您现有的VCL技能为未来构建下一代应用程序。在刚更新的DevExpress VCL v23.1组件库中包含了以下新的一些特性/功能增强的高DPI分辨率支持Light 样式渲染Windows 11主题VCL图表控件在本文中我们将重点介绍v23.1版本的图标控件中实现的一个重要特性——自定义轴、系列和总标签显示文本的功能这个新功能对多种使用场景都十分有用包括需要对所有值标签应用格式化模式、强调某些轴/系列值、为不同数量级显示不同的测量单位等。DevExpress新旧版本帮助文档下载可进QQ qun获取169725316如何将格式化模式应用于值标签DevExpress VCL Chart控件现在支持高级格式化模式类似于我们的WinForms Chart控件格式化模式可以由静态文本和一个或多个支持的占位符字段标记组成这些占位符字段标记包含在大括号中。所有显示数值的占位符标记也支持数值格式模式例如下面的格式化模式显示具有两位小数点的浮点序列值{V:0.00}大括号外的文本定义了相同格式化模式的通用值标签。您可以将相同/不同的格式化模式分配给图表、参数轴、值轴或简单序列的总标签中所有序列值的标签。系列值标签自定义没有格式化模式的序列值标签按原样显示值简单系列也向标签添加相应的参数。要在设计时将格式化模式应用于所有值标签(对于一个系列)您必须双击Chart控件来调用Chart Designer对话框。选择目标系列。在Object Inspector对象检查器中展开View 和 ValueLabels 节点。为TextFormat属性指定一个格式模式(例如{V:0.00}M km²)。在这个特殊的实例中值标签显示带有两个小数点后跟着一个度量单位的序列值。总标签自定义要自定义显示在Doughnut系列中心的Total标签您必须确保选择了目标系列。在Object Inspector对象检查器中展开View 和TotalLabel 节点。将相同的格式化模式分配给 TextFormat 属性。完成后Total标签将使用与value标签相同的格式如何自定义个性化值标签除了格式化模式(用于自定义值标签中的显示文本)之外还可以根据特定条件自定义单个标签——例如可以隐藏中间点的值标签或者为不同的数量级显示不同的测量单位。DevExpress VCL 的图表类包括以下值标签自定义事件这些事件在Chart控件决定如何绘制单个标签时发生OnGetValueLabelDrawParameters 和 OnGetAxisValueLabelDrawParameters 事件在XY图中可用并允许您分别自定义系列和轴值标签。OnGetValueLabelDrawParameters 和 OnGetTotalLabelDrawParameters事件在一个简单的图表中可用并允许您分别自定义系列值和总标签。用户可以处理这些事件来标识当前处理的标签并定义Chart控件在屏幕上绘制标签的方式。例如您可以通过以下方式在标记不同数量级的轴和序列值的标签中显示不同的测量单位如果一个序列值超过100万对应的值标签会显示百万数字后面的M字符。如果序列值超过1000但小于100万则相应的值标签显示后面跟着k字符的千位数字。要实现这一点需要处理 OnGetValueLabelDrawParameters 事件procedure TMyForm.cdAreaGetValueLabelDrawParameters(Sender: TdxChartCustomDiagram; AArgs: TdxChartGetValueLabelDrawParametersEventArgs); begin if AArgs.SeriesPoint.Value 1000 * 1000 then // Millions AArgs.Text : Format(%.1fM, [AArgs.SeriesPoint.Value / (1000 * 1000)]) else if AArgs.SeriesPoint.Value 1000 then // Thousands AArgs.Text : Format(%.0fk, [AArgs.SeriesPoint.Value / 1000]) else AArgs.Text : Format(%0f, [AArgs.SeriesPoint.Value]); end;然后处理OnGetAxisValueLabelDrawParameters事件procedure TMyForm.cdAreaGetAxisValueLabelDrawParameters(Sender: TdxChartCustomDiagram; AArgs: TdxChartGetAxisValueLabelDrawParametersEventArgs); begin if AArgs.Axis.ClassName TdxChartAxisY then Exit; if AArgs.Value 1000 * 1000 then // Millions AArgs.Text : Format(%.1fM, [AArgs.Value / (1000 * 1000)]) else if AArgs.Value 1000 then // Thousands AArgs.Text : Format(%.0fk, [AArgs.Value / 1000]) else AArgs.Text : Format(%0f, [AArgs.Value]); end;因此序列和轴值标签显示不同数量级的不同测量单位