procedure ChartDSet.AddSeries(XFieldName: string; YFieldName: string; AColor: integer);
const
COLORS: array[0..4] of TColor = (clBlue, $00000095, $00006A00, $000000D2, $006A0000);
LineStyle: array[0..2] of TFPPenStyle = (psSolid, psSolid, psSolid); //(psSolid, psDashDot, psDash);
var
new_series: TLineSeries;
DB_datasource: TDataSource;
chart_data_source: TDbChartSource;
begin
new_series := TLineSeries.Create(nil);
new_series.LinePen.Color := COLORS[AColor];
new_series.LinePen.Style := LineStyle[AColor mod 2];
new_series.LinePen.Width := 2;
(* link between value and line *)
new_series.Marks.LinkPen.Color := clBlack;
new_series.Marks.LinkPen.Width := 1;
new_series.Marks.LinkPen.EndCap := pecRound;
new_series.Marks.LinkPen.JoinStyle := pjsRound;
(* points *)
new_series.Pointer.Brush.Color := clRed;
new_series.Pointer.Visible := True;
new_series.Pointer.Style := psCircle;
new_series.Pointer.HorizSize := 2;
new_series.Pointer.VertSize := 2;
new_series.ShowPoints := True;
new_series.Marks.Clipped := True;
new_series.Marks.LabelBrush.Color := clSkyBlue;
new_series.Marks.LabelBrush.Style := bsSolid;
new_series.Title := YFieldName;
new_series.Marks.Frame.Color := clBlack;
new_series.Marks.Frame.Width := 1;
new_series.Marks.Frame.Mode := pmCopy;
DB_datasource := TDataSource.Create(nil);
DB_datasource.DataSet := _dataset;
DB_datasource.DataSet.Open;
if DB_datasource.DataSet.RecordCount <= 50 then
begin
new_series.Marks.Style := smsValue;
new_series.Marks.Shape := clsRoundRect;
end;
chart_data_source := TDbChartSource.Create(_chart);
chart_data_source.DataSource := DB_datasource;
chart_data_source.FieldX := XFieldName;
chart_data_source.FieldY := YFieldName;
new_series.ListSource.CopyFrom(chart_data_source);
_chart.AddSeries(new_series);
DB_datasource.Free;