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,'Hello',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;
于 2012-03-23T23:13:57.203 に答える