[gelöst] Kurvenschar in TAChart

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

[gelöst] Kurvenschar in TAChart

Beitrag von Theozh »

Hallo,
wie fügt man in einer Schleife zu einem Plot mehrere unzusammenhängende Kurven hinzu?
mit

Code: Alles auswählen

Chart1.AddSeries(PlotIV);
in einer Schleife hänge ich alles hintereinander.
Ich vermute, dass das irgendein Array of TLineSeries ist, wo man die einzelnen Kurven mit Index ansprechen kann.
Doch wie geht man da vor?
Das Tutorial http://wiki.freepascal.org/TAChart hilft mir nicht weiter...
Zuletzt geändert von Theozh am Sa 10. Aug 2013, 21:13, insgesamt 1-mal geändert.

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

Re: Kurvenschar in TAChart

Beitrag von wp_xyz »

Deine Angaben sind ziemlich spärlich...

Ich nehme an, du willst Datenreihen zur Laufzeit erzeugen und im Chart anzeigen. Das geht so:

Code: Alles auswählen

 
procedure TForm1.AddSeries;
var
  ser: TLineSeries;
begin
  ser := TLineSeries.Create(Chart);
  // hier müsstest du die Series mit Daten füllen...
  chart.AddSeries(ser);
end;
 
Um auf die einzelnen Series per Index zugreifen zu können, kannst du das Array Chart.Series[] benutzen. Allerdings gibt dieses nur den fundamentalsten Series-Typ TBasicSeries zurück, du musst also den Typ umwandeln. Zum Beispiel, um die Farbe zu ändern:

Code: Alles auswählen

 
procedure TForm1.SetSeriesColor(AIndex: Integer; AColor: TColor);
begin
  if Chart.Series[AIndex] is TLineSeries then
    TLineSeries(Chart.Series[AIndex]).SeriesColor := AColor;
end;:
 

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: Kurvenschar in TAChart

Beitrag von Theozh »

Danke wp_xyz, das hat geholfen. Ich muss natürlich in der Schleife jeweils ein neues TLineSeries.Create(Chart1) "erzeugen".
Und mit dem

Code: Alles auswählen

TLineSeries(Chart.Series[AIndex]).SeriesColor := AColor;
kann ich die Eigenschaften nachträglich ändern.
Unten ein "sinnfreies" Minimalbeispiel, bei dem 10 Zufallskurven mit Linienfarbe schwarz bis rot erzeugt werden, die dann bei Knopfdruck schwarz bis grün eingefärbt werden.

Code: Alles auswählen

unit Test_Chart_unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, TAGraph, TASeries, Forms, Controls, Graphics,
  Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Chart1: TChart;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  i,x: integer;
  Line: TLineSeries;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  for i:= 1 to 10 do
  begin
    Line:= TLineSeries.Create(Chart1);
    for x:= 0 to 50 do Line.AddXY(x,Random+i);
    Line.SeriesColor:= TColor(i*25);
    Chart1.AddSeries(Line);
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  for i:= 1 to 10 do
  begin
    TLineSeries(Chart1.Series[i-1]).SeriesColor:= TColor(i*25*256);
  end;
end;
 
end.
 

Antworten