Положение аннотации не обновляется при прокрутке серии - PullRequest
1 голос
/ 23 марта 2012

Я использую 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 Ответ

1 голос
/ 24 марта 2012

Аннотации располагаются либо на позициях пикселей, либо на относительных позициях на диаграмме в зависимости от того, как вы определяете свойство 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;
...