注释位置不会随着系列滚动而更新



我正在使用Annotation和AnnotationCallout在序列上创建标签。但我遇到的问题是,随着新数据添加到图表中,他们的头寸没有更新。该系列会滚动,但Annotation/AnnotationCall会保持在同一位置。

我用以下代码设置了Annotation和AnnotationCall:

Anno.setLeft(aSeries.calcXPos(iIndex)-51);
Anno.setTop(aSeries.calcYPos(iIndex)+100);
Callout.setXPosition(aSeries.calcXPos(iIndex));
Callout.setYPosition(aSeries.calcYPos(iIndex));

有没有办法把它们连接到序列上的点上,或者我在工作中使用了错误的工具?

根据定义Scaling属性的方式,批注位于图表上的像素位置或相对位置。

Annotation就是这样工作的。因此,一旦定义了注释的位置,它就会粘在那里。

如果你想在点上贴标签,可以看看Series.Marks

当你在系列中添加点时,你可以添加一个标签文本,比如:

AddXY(xPos,yPos,"你好",clGreen);

设置Series.Marks.Visible := True以显示标记标签。要动态自定义标签文本,请查看事件TChartSeries.OnGetMarkText

浏览所有Series.Marks属性,根据您的喜好定制外观。

更新:

为了隐藏序列数据上的一些标记,请在OnGetMarkText事件期间将标签文本设置为空字符串。

如何使用OnGetMarkText:的示例

...
Series1.OnGetMarkText := Self.Series1GetMarkText;  // Define the OnGetMarkText event
...
procedure TMyForm.Series1GetMarkText(Sender: TChartSeries;
  ValueIndex: Integer; var MarkText: string);
begin
  if ValueIndex=3 then  // Just an example how to set the selection criteria 
    MarkText := 'Hello'
  else
    MarkText := '';
end;

相关内容

  • 没有找到相关文章

最新更新