Search Results for

    Show / Hide Table of Contents

    Charts With Dynamic Series (Delphi)

    Note

    This demo is available in your FlexCel installation at <FlexCel Install Folder>\Demo\Delphi\Modules\20.Reports\75.Charts With Dynamic Series and also at https:​//​github.​com/​tmssoftware/​TMS-​FlexCel.​VCL-​demos/​tree/​master/​Delphi/​Modules/​20.​Reports/​75.​Charts With Dynamic Series

    Overview

    Examples of how to create a chart with one series per row. Charts with one series per row are not a common thing to do. You will normally want your series in columns, as shown in the example Charts. Even for this demo, the charts would probably look better if we had them with one series per column. But if you need to do it, you can use this example as a base.

    Concepts

    • How to use swap series to create a chart with a series per row, as explained in Creating charts with dynamic series.

    • To use <#swap series> in an embedded chart, you name the chart with a name containing <#swap series>.The tag will be removed from the final chart name. To use <#swap series> in a chart sheet, you write it on the sheet name. And again, the tag will be removed from the final sheet name.

    • How to use the TFlexCelReport.CustomizeChart event to further customize the chart.

    Files

    UMainForm.pas

    unit UMainForm;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics,
      FlexCel.VCLSupport, FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Report, FlexCel.Render,
      {$if CompilerVersion >= 23.0} System.UITypes, {$IFEND}
      ShellApi,
      Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
    
    type
      TMainForm = class(TForm)
        btnCancel: TButton;
        btnGo: TButton;
        SaveDialog: TSaveDialog;
        Label1: TLabel;
        procedure btnCancelClick(Sender: TObject);
        procedure btnGoClick(Sender: TObject);
      private
        procedure RunReport;
        function GetDataPath: string;
        procedure CustomizeSeriesColors(const sender: TObject;
          const e: TCustomizeChartEventArgs);
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      MainForm: TMainForm;
    
    implementation
    uses IOUtils, DemoData;
    
    {$R *.dfm}
    
    procedure TMainForm.btnCancelClick(Sender: TObject);
    begin
      Close;
    end;
    
    procedure TMainForm.btnGoClick(Sender: TObject);
    begin
      RunReport;
    
    end;
    
    function TMainForm.GetDataPath: string;
    begin
      Result := TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), '..\..');
    end;
    
    
    procedure TMainForm.RunReport;
    var
      Report: TFlexCelReport;
    begin
      if not SaveDialog.Execute then exit;
    
      Report := TFlexCelReport.Create(true);
      try
        Report.AddTable(DemoTables);
        Report.CustomizeChart := CustomizeSeriesColors;
        Report.Run(
          TPath.Combine(GetDataPath, 'Charts With Dynamic Series.template.xlsx'),
          SaveDialog.FileName);
      finally
        Report.Free;
      end;
    
      if MessageDlg('Do you want to open the generated file?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      begin
        ShellExecute(0, 'open', PCHAR(SaveDialog.FileName), nil, nil, SW_SHOWNORMAL);
      end;
    
    
    end;
    
    procedure TMainForm.CustomizeSeriesColors(const sender: TObject; const e: TCustomizeChartEventArgs);
    var
      subChart: integer;
      series: integer;
      seriesDef: IChartSeries;
      seriesOptions: TChartSeriesOptions;
    begin
      if (e.ChartName = 'Stock<#swap series>') then
      begin
         //In this event we will set the colors of the series depending on the product.
         //Let's image each product has an associated color that we want to use for its series.
        for subChart := 1 to e.Chart.SubchartCount do
        begin
          for series := 1 to e.Chart.SeriesInSubchart(subChart) do
          begin
            seriesDef := e.Chart.GetSeriesInSubchart(subChart, series, true, true, true);
            seriesOptions := seriesDef.Options[-1];
            seriesOptions.FillOptions := TChartSeriesFillOptions_Create(TShapeFill_Create(true, TSolidFill_Create(Colors.Red)), nil, false, false);
            seriesOptions.LineOptions := TChartSeriesLineOptions_Create(TShapeLine_Create(true, TLineStyle_Create(TSolidFill_Create(Colors.Red))), false);
            e.Chart.SetSeriesInSubchart(subChart, series, seriesDef);
          end;
    
        end;
    
      end;
    
    end;
    
    
    end.
    
    In This Article
    Back to top FlexCel Studio for VCL and FireMonkey v7.24
    © 2002 - 2025 tmssoftware.com