我正在使用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));
有没有办法将它们附加到系列上,或者我是否使用错误的工具来完成这项工作?
答案 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;