пометить регионы на диаграмме (Ганта)

[TeeChart 2015.14.150120]
У меня есть диаграмма Ганта, поэтому ось X основана на дате. Мне нужно было бы отметить периоды времени на графике. Т.е. отметьте 2009-2011 описывая его одним описанием, 2011-2013 другим названием...

I've tried to use TColorBandTool but it had some drawbacks:

  1. Я больше не мог щелкнуть записи диаграммы (даже если инструмент был помечен как «позади»
  2. Я не мог показать описание периода.

Поэтому я попытался использовать TColorLineTool, который работал лучше (почти идеально), но:

  1. текстовые панели для разных периодов были показаны в одном и том же (вертикальном) положении, поэтому они несколько раз перекрывались.
  2. Когда последняя TextPanel была длиннее, чем оставшаяся часть диаграммы, она «выпадала», размер диаграммы не изменялся, чтобы отображать панель в диаграмме.

Итак, теперь у меня появилась другая Идея: использовать разные серии, чтобы построить одну линию по всей ширине графика, каждую серию за один период, чтобы показать. Но мне пришлось бы показать описание этих серий в дополнительных легендах (TExtraLegendTool), чтобы хватило места для текстов. Но мне не удалось отобразить TExtraLegendTool. Я предполагаю, что в этой версии TeeChart есть ошибка, так как демонстрация, добавленная установщиком, не показывает этот инструмент.
Теперь я не совсем понимаю, что делать дальше. У кого-нибудь есть идея?


person Klaus    schedule 24.06.2015    source источник


Ответы (1)


Я попробовал первый подход:

Я пытался использовать TColorBandTool, но у него были некоторые недостатки:

  1. Я больше не мог щелкнуть записи диаграммы (даже если инструмент был помечен как «позади»
  2. Я не мог показать описание периода.

И я думаю, что это работает для меня хорошо здесь. Вот как это выглядит и ниже код, который я использовал. Обратите внимание, что я отключил свойства AllowDrag, ResizeStart и ResizeEnd TColorBandTool.

Гантт с цветовыми полосами и аннотациями

var gantt1: TGanttSeries;
    greenBand, blueBand: TColorBandTool;
    greenAnnot, blueAnnot: TAnnotationTool;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.Title.Visible:=false;
  Chart1.View3D:=false;
  Chart1.Legend.Alignment:=laBottom;

  gantt1:=Chart1.AddSeries(TGanttSeries) as TGanttSeries;
  gantt1.FillSampleValues(10);

  greenBand:= Chart1.Tools.Add(TColorBandTool) as TColorBandTool;
  with greenBand do
  begin
    Color:=clGreen;
    Transparency:=50;
    Axis:=Chart1.Axes.Bottom;
    StartValue:=gantt1.StartValues[1];
    EndValue:=gantt1.EndValues[2];
    AllowDrag:=false;
    ResizeStart:=false;
    ResizeEnd:=false;
  end;

  blueBand:= Chart1.Tools.Add(TColorBandTool) as TColorBandTool;
  with blueBand do
  begin
    Color:=clBlue;
    Transparency:=50;
    Axis:=Chart1.Axes.Bottom;
    StartValue:=gantt1.StartValues[9];
    EndValue:=gantt1.EndValues[8];
    AllowDrag:=false;
    ResizeStart:=false;
    ResizeEnd:=false;
  end;

  Chart1.MarginTop:=10;

  Chart1.Draw;

  greenAnnot:=Chart1.Tools.Add(TAnnotationTool) as TAnnotationTool;
  with greenAnnot do
  begin
    Shape.Transparent:=true;
    Shape.Font.Color:=clGreen;
    Text:='Green annotation';
    Top:=Chart1.ChartRect.Top-15;
    Left:=Chart1.Axes.Bottom.CalcPosValue(greenBand.StartValue+(greenBand.EndValue-greenBand.StartValue)/2) -
          (Chart1.Canvas.TextWidth(Text) div 2);
  end;

  blueAnnot:=Chart1.Tools.Add(TAnnotationTool) as TAnnotationTool;
  with blueAnnot do
  begin
    Shape.Transparent:=true;
    Shape.Font.Color:=clBlue;
    Text:='Blue annotation';
    Top:=Chart1.ChartRect.Top-15;
    Left:=Chart1.Axes.Bottom.CalcPosValue(blueBand.StartValue+(blueBand.EndValue-blueBand.StartValue)/2) -
          (Chart1.Canvas.TextWidth(Text) div 2);
  end;
end;
person Yeray    schedule 26.06.2015