发球台图在甘特系列的顶部绘制网格线

问题描述

我正在使用甘特系列在图表上显示区域。问题是系列绘制在图表网格的顶部。

Shading with Gantt series

我希望在网格顶部绘制普通线系列,并在其后面绘制甘特系列。如果没有 OnAfterDraw,是否可以使用标准的 TChart 功能

解决方法

您可以在 TGanttSeries 处绘制 OnBeforeDrawAxes,然后在 OnBeforeDrawSeries 处将其隐藏,最后在 OnAfterDraw 处再次使其可见以供下一个绘制周期:

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TGanttSeries;
    Series2: TLineSeries;
    procedure FormCreate(Sender: TObject);
    procedure Chart1BeforeDrawAxes(Sender: TObject);
    procedure Chart1BeforeDrawSeries(Sender: TObject);
    procedure Chart1AfterDraw(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type TCustomSeriesAccess=class(TCustomSeries);

procedure TForm1.Chart1BeforeDrawAxes(Sender: TObject);
begin
  TCustomSeriesAccess(Series1).DrawAllValues;
end;

procedure TForm1.Chart1BeforeDrawSeries(Sender: TObject);
begin
  Series1.Visible:=False;
end;

procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin
  Series1.Visible:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.Draw;
end;

result