我想为TGanttSeries添加一个空甘特图系列。怎么做 ?将一个空甘特图添加到系列
我希望图表上的绘图甚至是空的。
我试着把Serie.AddGanttColor(0,0,i,SerieName [i],clBlue);但它打印30/12/1899酒吧...
这里是我做了一个画面:TCHART
我需要提出的是,在左侧还绘制系列1(1#任务) TChart的轴。 (这里Series Series1不包含任何绘制点)
我想为TGanttSeries添加一个空甘特图系列。怎么做 ?将一个空甘特图添加到系列
我希望图表上的绘图甚至是空的。
我试着把Serie.AddGanttColor(0,0,i,SerieName [i],clBlue);但它打印30/12/1899酒吧...
这里是我做了一个画面:TCHART
我需要提出的是,在左侧还绘制系列1(1#任务) TChart的轴。 (这里Series Series1不包含任何绘制点)
您可以通过将其“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.
谢谢你的回答,是的,我明白你的意思,对不起......用你的答案,只有系列:TChart上绘制的Series2和Series3。但是我的问题是:即使TTGantSeries上没有点,如何在垂直的Tchart轴上也打印Series1。主要目标是始终显示相同的图表,即使我们没有关于系列的点数 –
我已增强了代码并更改了答案。希望这更接近你想要实现的目标。 –
30/12/1899是数字零的日期解释。 – Dsm
这样的范围没有意义。你为什么要创建它?对于用户来说,它是无用的。 – Victoria
我有6个différent“系列”,即使它们是空的,我也想将它们全部显示出来... –