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;