2012-03-23 46 views
1

我使用Annotation和AnnotationCallout在系列上创建标签。但我遇到的问题是他们的职位并没有随着新数据添加到图表而更新。该系列卷轴,但Annotation/AnnotationCallout保持在同一个位置。由于系列卷轴不更新注释位置

我设置了注释和AnnotationCallout用下面的代码:

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

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

有没有办法附加它们指向一系列或我使用了错误的工作工具?

回答

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; 
+0

谢谢。 SeriesMarks是我一直在寻找的。它的工作,除了系列中的所有点都有其y值的标记。我如何防止这种情况? – user1254689 2012-03-26 06:39:04

+0

查看我更新的答案。 – 2012-03-26 06:52:59

+0

如果我将所有标记设置为“”,那么y值仍然会出现。这里是我的代码: SeriesMarks sMarks_Chart1_Line2 = new SeriesMarks(Chart1_Line2); sMarks_Chart1_Line2.setVisible(true); sMarks_Chart1_Line2.getPen()。setColor(Color.RED); \t \t \t \t Chart1_Line2.setMarks(sMarks_Chart1_Line2); Chart1_Line2.getMarks()。setVisible(true); Chart1_Line2.add(new com.steema.teechart.DateTime(new DateTime(tsDateTime).getMillis()),dStart_value,“”); – user1254689 2012-03-26 07:04:06