彩票走势图

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

翻译|使用教程|编辑:龚雪|2023-07-03 09:44:23.523|阅读 47 次

概述:本文将介绍在DevExpress VCL v23.1图表控件中实现一个重要自定义功能,欢迎下载最新版组件体验!

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

DevExpress VCL拥有230+个VCL界面控件、40+个自定义设计的VCL应用主题,它能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程序。

在刚更新的DevExpress VCL v23.1组件库中,包含了以下新的一些特性/功能:

  • 增强的高DPI分辨率支持
  • "Light" 样式渲染
  • Windows 11主题
  • VCL图表控件

在本文中,我们将重点介绍v23.1版本的图标控件中实现的一个重要特性——自定义轴、系列和总标签显示文本的功能,这个新功能对多种使用场景都十分有用,包括需要对所有值标签应用格式化模式、强调某些轴/系列值、为不同数量级显示不同的测量单位等。

DevExpress VCL v23.1正式版下载

DevExpress技术交流群8:523159565      欢迎一起进群讨论

如何将格式化模式应用于值标签

DevExpress VCL Chart控件现在支持高级格式化模式,类似于我们的WinForms Chart控件,格式化模式可以由静态文本和一个或多个支持的占位符字段标记组成,这些占位符字段标记包含在大括号中。

所有显示数值的占位符标记也支持数值格式模式,例如,下面的格式化模式显示具有两位小数点的浮点序列值:{V:0.00},大括号外的文本定义了相同格式化模式的通用值标签。

您可以将相同/不同的格式化模式分配给图表、参数轴、值轴或简单序列的总标签中所有序列值的标签。

系列值标签自定义

没有格式化模式的序列值标签按原样显示值,简单系列也向标签添加相应的参数。

DevExpress VCL图表控件

要在设计时将格式化模式应用于所有值标签(对于一个系列),您必须:

  1. 双击Chart控件来调用Chart Designer对话框。
  2. 选择目标系列。
  3. 在(对象检查器)中展开 和 节点。
  4. 为属性指定一个格式模式(例如{V:0.00}M km²)。

在这个特殊的实例中,值标签显示带有两个小数点后跟着一个度量单位的序列值。

DevExpress VCL图表控件
总标签自定义

要自定义显示在Doughnut系列中心的Total标签,您必须:

  1. 确保选择了目标系列。
  2. 在(对象检查器)中展开 和 节点。
  3. 将相同的格式化模式分配给 属性。

完成后,Total标签将使用与value标签相同的格式:

DevExpress VCL图表控件
如何自定义个性化值标签

除了格式化模式(用于自定义值标签中的显示文本)之外,还可以根据特定条件自定义单个标签——例如,可以隐藏中间点的值标签,或者为不同的数量级显示不同的测量单位。DevExpress VCL的图表类包括以下值标签自定义事件,这些事件在Chart控件决定如何绘制单个标签时发生:

  • 和 事件在XY图中可用,并允许您分别自定义系列和轴值标签。
  • 和 事件在一个简单的图表中可用,并允许您分别自定义系列值和总标签。

用户可以处理这些事件来标识当前处理的标签,并定义Chart控件在屏幕上绘制标签的方式。例如,您可以通过以下方式在标记不同数量级的轴和序列值的标签中显示不同的测量单位:

  • 如果一个序列值超过100万,对应的值标签会显示百万数字后面的M字符。
  • 如果序列值超过1000但小于100万,则相应的值标签显示后面跟着k字符的千位数字。

要实现这一点,需要处理 事件:

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;

然后,处理事件:

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;

因此,序列和轴值标签显示不同数量级的不同测量单位:

DevExpress VCL图表控件

DevExpress企业定制服务

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:慧都网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP