"Pointer.Visible"プロパティを "false"に設定することで、空の系列を非表示にすることができます。これは、凡例にそのシリーズを含めます。グラフ上で系列を空白にしたい場合(ラベルはまだ左軸に沿って描かれています)、少なくとも1つの値を追加する必要があります。グラフの可読性を保つのに役立つ値を選択してください。私の例では、空でない系列から最も小さい日付を使用することを選択し、すべての系列が「空」の場合、現在の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.
30/12/1899は、ゼロの日付解釈である。 – Dsm
このような範囲は意味をなさない。なぜそれを作成したいのですか?ユーザーにとっては役に立たない。 – Victoria
私は6つの異なるシリーズを持っていて、それらが空であってもそれらをすべて表示したい... –