2017-06-12 5 views
-2

空のガントシリーズをTGanttSeriesに追加したいと思います。どうやってするか ?空のガントをセリに追加

チャート上のセリエイを空にしたい場合もあります。

Serie.AddGanttColor(0、0、i、SerieName [i]、clBlue)を入力しようとしました。 TCHART

私は何を作るために必要なのも左側にシリーズ1(1タスク#)を描画することですが、それはここで30/12/1899にバー...

私が作ったものの絵を印刷しますTChartの軸。 (Series Series1には描画するポイントが含まれていません)

+0

30/12/1899は、ゼロの日付解釈である。 – Dsm

+0

このような範囲は意味をなさない。なぜそれを作成したいのですか?ユーザーにとっては役に立たない。 – Victoria

+0

私は6つの異なるシリーズを持っていて、それらが空であってもそれらをすべて表示したい... –

答えて

0

"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. 
+0

お返事ありがとうございます、ごめんなさい、ごめんなさい...ご回答いただければ、Series2とSeries3がTChartに描かれています。しかし、私の質問は、TTGantSeries上にポイントがなくても縦型Tchart軸にSeries1も印刷する方法です。主な目標は、セリフにポイントがない場合でも常に同じグラフを表示することです –

+0

私はコードを拡張し、答えを変更しました。うまくいけば、これはあなたが達成しようとしているものに近いです。 –

関連する問題