OnGetMarkText 未在 TContourSeries 中触发
OnGetMarkText is not fired in TContourSeries
我有一个带有可见标记的 TContourSeries,我想以自定义格式显示百分比值。所以我创建了一个方法 GetMarkText 并将其分配给 OnGetMarkText 属性。让我们假设它看起来像这样(简化):
...
serContourLines.OnGetMarkText := GetMarkText;
...
procedure TForm1.GetMarkText(Sender: TChartSeries;
ValueIndex: Integer; var MarkText: string);
begin
MarkText := MarkText + ' %';
end;
但是该方法从未被调用。轮廓线上的标记显示正常,但文本只是来自数据的值。它甚至考虑了该系列的 ValueFormat。但它不显示事件方法中定义的文本。
代码被标记为已编译(蓝点),但从未到达方法中的断点。
我正在复制来自 here 的回复:
Contour系列有点特别,不像其他系列那样画痕迹。它在内部计算等级并为每个等级绘制标记,而不是为每个点绘制标记。
但是,我相信它可以毫无问题地使用 OnGetMarkText
事件,所以我将它添加到 public 跟踪器 (#2253).
既然你有源码,能否请你尝试将这两行代码添加到TeeSurfa.pas中的TContourSeries.DrawAllValues.DrawLevelLines
方法中?
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;
我有一个带有可见标记的 TContourSeries,我想以自定义格式显示百分比值。所以我创建了一个方法 GetMarkText 并将其分配给 OnGetMarkText 属性。让我们假设它看起来像这样(简化):
...
serContourLines.OnGetMarkText := GetMarkText;
...
procedure TForm1.GetMarkText(Sender: TChartSeries;
ValueIndex: Integer; var MarkText: string);
begin
MarkText := MarkText + ' %';
end;
但是该方法从未被调用。轮廓线上的标记显示正常,但文本只是来自数据的值。它甚至考虑了该系列的 ValueFormat。但它不显示事件方法中定义的文本。
代码被标记为已编译(蓝点),但从未到达方法中的断点。
我正在复制来自 here 的回复:
Contour系列有点特别,不像其他系列那样画痕迹。它在内部计算等级并为每个等级绘制标记,而不是为每个点绘制标记。
但是,我相信它可以毫无问题地使用 OnGetMarkText
事件,所以我将它添加到 public 跟踪器 (#2253).
既然你有源码,能否请你尝试将这两行代码添加到TeeSurfa.pas中的TContourSeries.DrawAllValues.DrawLevelLines
方法中?
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;