在系列中添加空甘特

时间:2017-06-12 09:16:32

标签: delphi teechart gantt-chart

我想在TGanttSeries中添加一个空的甘特系列。怎么做?

我希望图表上的系列画画是空的。

我试图把Serie.AddGanttColor(0,0,i,SerieName [i],clBlue);但它在18/12年12月30日打印了一个酒吧......

这是我所做的图片:TCHART

我需要做的是在TChart的左轴上绘制Series1(任务#1)。 (此处系列1不包含任何要绘制的点)

1 个答案:

答案 0 :(得分:0)

你可以隐藏"空"系列通过设置它的" Pointer.Visible"属于" false"。这仍然包括传奇中的那个系列。如果您希望系列在图表上为空白(标签仍沿左轴绘制),则需要至少添加一个值,并且您肯定要选择一个有助于保留图表的可读性。在我的例子中,我选择使用非空系列中最小的日期,如果所有系列都是"空的"只需使用当前的DateTime(" Now")。

此外,您想要连接图表" GetLegendText"事件,因此您只能提供每个系列的名称,而不是系列名称及其数据的某种组合。图例的属性中似乎没有有用的设置。你可以扩展它并只返回系列'空的名称和一些更有意义的名称/数据组合。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VclTee.TeeGDIPlus, VCLTee.TeEngine, Vcl.ExtCtrls, VCLTee.TeeProcs, VCLTee.Chart,
  VCLTee.Series, VCLTee.GanttCh, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TGanttSeries;
    Button1: TButton;
    Series2: TGanttSeries;
    Series3: TGanttSeries;
    procedure FormCreate(Sender: TObject);
    procedure Chart1GetLegendText(Sender: TCustomAxisPanel; LegendStyle: TLegendStyle; Index: Integer; var LegendText: string);

  private
    Series : array[0..2] of TGanttSeries;
    SeriesName : array[0..2] of string;
    SeriesStart : array[0..2] of TDateTime;
    SeriesEnd : array[0..3] of TDateTime;
    SeriesColor : array[0..2] of TColor;

   procedure DrawChart;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var
   i : integer;

begin
   Series[0] := Series1;
   Series[1] := Series2;
   Series[2] := Series3;

   SeriesName[0] := 'Task #1';
   SeriesName[1] := 'Task #2';
   SeriesName[2] := 'Task #3';

   SeriesStart[0] := 0;        SeriesEnd[0] := 0;
   SeriesStart[1] := Now;      SeriesEnd[1] := Now+1;
   SeriesStart[2] := Now+0.5;  SeriesEnd[2] := Now+3;

   SeriesColor[0] := clBlue;
   SeriesColor[1] := clGreen;
   SeriesColor[2] := clRed;

   for i := 0 to 2 do
      begin
         Series[i].ColorEachPoint := false;
         Series[i].SeriesColor := SeriesColor[i];
      end;


   DrawChart;
end;

procedure TForm1.DrawChart;

var
   EmptyValue : TDateTime;
   i : integer;

begin
   EmptyValue := 0;
   for i := 0 to 2 do
      begin
         if (SeriesStart[i] <> 0) and
              ( (EmptyValue = 0) or (EmptyValue > SeriesStart[i]) ) then
            EmptyValue := SeriesStart[i];
      end;
   if EmptyValue = 0 then
      EmptyValue := Now;

   for i := 0 to 2 do
      begin
         Series[i].Clear;
         if SeriesStart[i] = 0 then
            begin
               Series[i].Pointer.Visible := false;
               Series[i].AddGanttColor(EmptyValue,EmptyValue, i, SeriesName[i], SeriesColor[i])
            end
         else
            begin
               Series[i].Pointer.Visible := true;
               Series[i].AddGanttColor(SeriesStart[i],SeriesEnd[i],i,SeriesName[i], SeriesColor[i])
            end;
      end;
end;

procedure TForm1.Chart1GetLegendText(Sender: TCustomAxisPanel; LegendStyle: TLegendStyle; Index: Integer; var LegendText: string);

begin
   LegendText := SeriesName[Index];
end;

end.