系列滚动时不会更新注释位置

时间:2012-03-23 15:35:37

标签: java teechart

我正在使用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));

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

1 个答案:

答案 0 :(得分:1)

根据您定义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;