首页 > 解决方案 > 在 TContourSeries 中未触发 OnGetMarkText

问题描述

我有一个带有可见标记的 TContourSeries,并希望以自定义格式显示百分比值。所以我创建了一个 GetMarkText 方法并将其分配给 OnGetMarkText 属性。让我们假设它看起来像这样(简化):

...
  serContourLines.OnGetMarkText := GetMarkText;
...

procedure TForm1.GetMarkText(Sender: TChartSeries;
  ValueIndex: Integer; var MarkText: string);
begin
  MarkText := MarkText + ' %';
end;

但是该方法永远不会被调用。等高线上的标记显示得很好,但文本只是来自数据的值。它甚至考虑了该系列的 ValueFormat。但它不显示事件方法中定义的文本。

代码被标记为已编译(蓝点),但永远不会到达方法中的断点。

标签: delphiteechart

解决方案


我从这里复制回复:

轮廓系列有点特别,它没有像其他系列那样绘制标记。它在内部计算级别并为每个级别绘制一个标记,而不是为每个点绘制一个标记。但是,我相信它可以OnGetMarkText毫无问题地使用该事件,因此我已将其添加到公共跟踪器(#2253)。

既然你有源代码,请你尝试将这两行代码添加到TContourSeries.DrawAllValues.DrawLevelLinesTeeSurfa.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;

推荐阅读