delphi - 在 TContourSeries 中未触发 OnGetMarkText
问题描述
我有一个带有可见标记的 TContourSeries,并希望以自定义格式显示百分比值。所以我创建了一个 GetMarkText 方法并将其分配给 OnGetMarkText 属性。让我们假设它看起来像这样(简化):
...
serContourLines.OnGetMarkText := GetMarkText;
...
procedure TForm1.GetMarkText(Sender: TChartSeries;
ValueIndex: Integer; var MarkText: string);
begin
MarkText := MarkText + ' %';
end;
但是该方法永远不会被调用。等高线上的标记显示得很好,但文本只是来自数据的值。它甚至考虑了该系列的 ValueFormat。但它不显示事件方法中定义的文本。
代码被标记为已编译(蓝点),但永远不会到达方法中的断点。
解决方案
我从这里复制回复:
轮廓系列有点特别,它没有像其他系列那样绘制标记。它在内部计算级别并为每个级别绘制一个标记,而不是为每个点绘制一个标记。但是,我相信它可以OnGetMarkText
毫无问题地使用该事件,因此我已将其添加到公共跟踪器(#2253)。
既然你有源代码,请你尝试将这两行代码添加到TContourSeries.DrawAllValues.DrawLevelLines
TeeSurfa.pas 中的方法中吗?
if tmpDrawMarks then
begin
// Get mark text:
case Marks.Style of
smsSeriesTitle: tmpSt:=SeriesTitleOrName(Self);
smsPointIndex: tmpSt:=IntToStr(TheLevel);
else
tmpSt:=FormatFloat(ValueFormat,UpToValue);
end;
if Assigned(OnGetMarkText) then //Fix for #2253, Line 5429
OnGetMarkText(Self,TheLevel,tmpSt);
// Get mark size:
CalculateMarkPosition(Marks,tmpSt,0,0,Position);
tmpSize.X:=Position.Width;
tmpSize.Y:=Position.Height;
end;
推荐阅读
- sql-server - MS Access 链接表到 SQL Server
- php - 电子邮件已经存在,codeigniter 中的 Jquery 验证器插件不起作用
- java - Java Spring MVC 映射问题
- angular - Angular 6:使用带有异步的日期格式管道
- flume-ng - 将水槽中的流量多路复用到多个通道中
- python - 列表理解以创建列表
- azure-devops - 如何在 VSTS 中创建一个报告以整理工作项描述/解决方案以便于阅读?
- apache-flink - Flink 中一个作业中的多个作业或多个管道
- visual-studio - VS 中异步函数关键字下的 extjs 警告/错误
- php - Codeigniter - 在文件夹名称更改时找不到 404 页面