2012-03-23 45 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