TAChart Runtime FAQ: Difference between revisions

From Free Pascal wiki
Jump to navigationJump to search
(→‎Series: Delete a series at runtime)
Line 43: Line 43:
end;
end;
</syntaxhighlight>
</syntaxhighlight>
If you prefer the more modern iterators you can use the syntax
<syntaxhighlight>
uses
  TASeries, TAEnumerators;
var
  ser: TCustomSeries;
begin
  for ser in CustomSeries(AChart) do
    TLineSeries(ser).Series.Color := clRed;
end;</syntaxhighlight>


=== How to delete/hide a series at runtime? ===
=== How to delete/hide a series at runtime? ===

Revision as of 11:53, 29 January 2018

This wiki is trying to answer frequently asked questions related to usage of TAChart at runtime

Series

How to add a series at runtime?

Just create the series, set its properties and call the chart method AddSeries

uses
  TATypes, TASeries;

function AddLineSeries(AChart: TChart; ATitle: String): TChartSeries;
begin
  Result := TLineSeries.Create(AChart.Owner);
  with TLineSeries(Result) do
  begin
    // Series title for the legend
    SeriesTitle := ATitle;
    // Show data point markers (red fill color, black border)
    ShowPoints := true;  
    Pointer.Brush.Color := clRed;
    Pointer.Pen.Color := clBlack;
    Pointer.Style := psCircle;
    // Show red line segments connecting the data points
    ShowLines := true;   
    LinePen.Style := psSolid;
    SeriesColor := clRed;
  end;
  // Add new series to the chart
  AChart.AddSeries(Result);
end;

How to iterate through the series of a chart?

The series are accessible via the array-like property Series of the chart. Note that this returns only the most fundamental series type, TBasicChartSeries, and a type-cast may be necessage before being able to access the series properties.

The following example re-colors all line series in red:

uses
  TASeries;
var 
  i: Integer;
begin
  for i := 0 to AChart.SeriesCount-1 do
    if AChart.Series[i] is TLineSeries then
      TLineSeries(AChart.Series[i]).SeriesColor := clRed;
end;

If you prefer the more modern iterators you can use the syntax

uses
  TASeries, TAEnumerators;
var
  ser: TCustomSeries;
begin
  for ser in CustomSeries(AChart) do
    TLineSeries(ser).Series.Color := clRed;
end;

How to delete/hide a series at runtime?

  • If you don't need the series any more just destroy it: series.Free.
  • If you want to keept it for other usage, for example to insert it into another chart, call Chart.DeleteSeries(series).
  • If you want to hide it, but keep it in the chart, set the property Active of the series to false.