1

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

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

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

Callout.setXPosition(aSeries.calcXPos(iIndex));
Callout.setYPosition(aSeries.calcYPos(iIndex));

有没有办法将它们附加到一个系列上,还是我使用了错误的工具来完成这项工作?

4

1 回答 1

1

注释位于图表上的像素位置或相对位置,具体取决于您定义Scaling属性的方式。

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

如果您想将标签贴在点上,请查看Series.Marks.

当您向系列添加点时,您可以添加标签文本,例如:

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

设置Series.Marks.Visible := True为显示标记标签。要即时自定义标签文本,请查看 event 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;
于 2012-03-23T23:13:57.203 回答