ChartLineSeries in Array oder Liste packen möglich?

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

ChartLineSeries in Array oder Liste packen möglich?

Beitrag von photor »

Hallo Liste,

ich will in einem TChart ein paar! LineSeries darstellen und löse das im Moment eher mit der Holzhammermethode (Code-Schnipsel, der es verdeutlichen soll: hässlich):

Code: Alles auswählen

 
TForm1 = class(TForm)
    ButtonParaApply : TButton;
    ButtonPowTorRecalc : TButton;
    Chart1 : TChart;
    Chart1LineSeries1 : TLineSeries;
    Chart1LineSeriesGear6 : TLineSeries;
    Chart1LineSeriesGear5 : TLineSeries;
    Chart1LineSeriesGear4 : TLineSeries;
    Chart1LineSeriesGear3 : TLineSeries;
    Chart1LineSeriesGear2 : TLineSeries;
    Chart1LineSeriesGear1 : TLineSeries;
    Chart1LineSeriesTorque : TLineSeries;
    Chart1LineSeriesPower : TLineSeries;
    EditAddWeight : TEdit;
    EditBikeWeight : TEdit;
    EditCoGX : TEdit;
 
    [...]
 
  end; 
 
with Chart1LineSeriesGear1 do
  begin
    Clear;
    Active := False;
    LinePen.Color := clBlue;
    LinePen.Width := 3;
  end;
  with Chart1LineSeriesGear2 do
  begin
    Clear;
    Active := False;
    LinePen.Color := clBlue;
    LinePen.Width := 3;
  end;
 
  [...]
 
  with Chart1LineSeriesGear6 do
  begin
    Clear;
    Active := False;
    LinePen.Color := clBlue;
    LinePen.Width := 3;
  end;
 


Nun wäre es ja eleganter, wenn man die Chart1LineSeriesGear[1-6] in ein Array (eventuell dynamisch) oder eine TList packen würde - etwa so:

Code: Alles auswählen

 
var
  g: integer;
begin 
  for g:= 1 to 6
  begin
    with Chart1LineSeriesGear[g] do
    begin
      Clear;
      Active := False;
      LinePen.Color := clBlue;
      LinePen.Width := 3;
    end;
  end;
 


Das sollte doch möglich sein? Geht es vielleicht noch eleganter/kürzer/zweckmäßiger?

Dankbar für jeden Tipp,

Photor

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: ChartLineSeries in Array oder Liste packen möglich?

Beitrag von wp_xyz »

Am klarsten ist es, wenn du die Lineseries nicht zur Designzeit im Objektinspektor erzeugst, sondern zur Laufzeit per Code:

Code: Alles auswählen

type
  TForm1 = class(TForm)
  ....
  private
    LineSeriesGear: array[0..5] of TLineSeries;
    function CreateLineSeries(ATitle: String; AColor: TColor; APenstyle: TPenStyle; APenWidth: Integer): TLineSeries;
    procedure CreateAllLineSeriesGear;
  ....
  end;
 
function TForm1.AddLineSeries(ATitle: String; AColor: TColor; APenstyle: TPenStyle; APenWidth: Integer): TLineSeries;
begin
  Result := TLineSeries.Create(self);
  with Result do begin
    Title := ATitle;
    SeriesColor := AColor;
    LinePen.Width := APenWidth;
    LinePen.Style := APenStyle;
    Active := false;
    // Clear;  --- nicht nötig, weil eine neue Series immer leer ist.
  end;
  Chart1.AddSeries(Result);
end;
 
procedure TForm1.CreateAllLineSeriesGear;
const
  GEAR_COLORS: array[0..5] of TColor = (clRed, clBlue, clGreen, clBlack, clOlive, clGray);
var
  i: Integer;
begin
  for i:=0 to 5 do
    LineSeriesGear[i] := AddLineSeries('Gear ' + IntToStr(i+1), GEAR_COLORS[i], psSolid, 3);
end;

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: ChartLineSeries in Array oder Liste packen möglich?

Beitrag von photor »

Hallo wp_xyz,

danke für die schnelle Antwort und den Schubser in diese Richtung. Soweit hatte ich noch nicht gedacht, aber das sieht interessant aus (zumal da später eventuell noch zusätzliche Hilfslinien hinzukommen).

Ciao,

Photor

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: ChartLineSeries in Array oder Liste packen möglich?

Beitrag von photor »

Gerade probiert - und tut ... :D kleine Korrektur: das muss sicherlich so heißen:
wp_xyz hat geschrieben:[...]

Code: Alles auswählen

 
 [...]
  private
[...]
    function AddSeries(ATitle: String; AColor: TColor; APenstyle: TPenStyle; APenWidth: Integer): TLineSeries;
    procedure CreateAllLineSeriesGear;
  ....
[...] 
 


Danke,

Photor

Antworten