TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
stephan87
Beiträge: 4
Registriert: Di 8. Jun 2010, 15:01

TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von stephan87 »

Hallo,

Ich möchte in einem TChart mehrere Kurven haben. In dem mitgelieferten Beispiel wird TSeries und TSerie für ein Linien-Diagramm verwendet, damit lassen sich nicht mehrere Kurven in ein Diagramm einfügen. Jedesmal wenn ich eine hinzufüge wird diese angezeigt und die alte gelöscht.

Ich bekam den Hinweis es mit TLineSeries zu versuchen und fand dazu auch etwas Code. Allerdings erhalte ich den Fehler: "unit1.pas(27,38) Error: Identifier not found "TLineSeries"" Wenn ich kompilieren möchte.


Ich poste mal meine komplette Testunit.

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  TAGraph, StdCtrls, TASeries;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Chart1: TChart;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1;
   FLine: array[0..50] of TLineSeries;
       x, y, x1, y1, x3, y3: Double;
       seriescount : integer = 0;
 
implementation
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  Fline[seriescount] := TLineSeries.Create(Chart1);
  Fline[seriescount].ShowLines := true;
  Fline[seriescount].ShowPoints := true;
  Fline[seriescount].Pointer.Style := psRectangle;
  Fline[seriescount].Title := 'line';
  Fline[seriescount].SeriesColor := clRed;
  Chart1.AddSerie(Fline[seriescount]);
 
   for i := 1 to 10 do begin
    Fline[seriescount].AddXY(x1, y1, '', clGreen);
    X1 := X1 + 1.5;
    if random(2) >= 0.5 then Y1 := Y1 + random(10)
    else Y1 := Y1 - random(5);
  end;
 
  inc(seriescount);
 
 
end;
 
initialization
  {$I unit1.lrs}
 
end.
Danke!

stephan87
Beiträge: 4
Registriert: Di 8. Jun 2010, 15:01

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von stephan87 »

Hat niemand eine Idee?

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von theo »

stephan87 hat geschrieben:Hat niemand eine Idee?
Ich hab keine Ahnung von Charts, aber ich hab mal eine Minute rumgespielt.
Das funzt bei mir:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes,SysUtils,FileUtil,Forms,Controls,Graphics,Dialogs,StdCtrls,
  TAGraph,TASeries, TAChartUtils;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1:TButton;
    Chart1:TChart;
    procedure Button1Click(Sender:TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
 
 
 
{ TForm1 }
 
var
  Form1: TForm1;
   FLine: array[0..50] of TLineSeries;
       x, y, x1, y1, x3, y3: Double;
       seriescount : integer = 0;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  Fline[seriescount] := TLineSeries.Create(Chart1);
  Fline[seriescount].ShowLines := true;
  Fline[seriescount].ShowPoints := true;
  Fline[seriescount].Pointer.Style := psRectangle;
  Fline[seriescount].Title := 'line';
  Fline[seriescount].SeriesColor := clRed;
  Chart1.AddSeries(Fline[seriescount]);
 
   for i := 1 to 10 do begin
    Fline[seriescount].AddXY(x1, y1, '', clGreen);
    X1 := X1 + 1.5;
    if random(2) >= 0.5 then Y1 := Y1 + random(10)
    else Y1 := Y1 - random(5);
  end;
 
  inc(seriescount);
 
 
end;
end.

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von theo »

P.S. wenn du eine ältere Laz Version hast, kannst du das Bsp. u.U nicht direkt kopieren, sondern musst das {$R *.lfm} entfernen und deinen Code bei initialization einfügen.

stephan87
Beiträge: 4
Registriert: Di 8. Jun 2010, 15:01

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von stephan87 »

Hi,

Ändert leider nichts, es kommt: Identifier not found: TLineSeries.


Ich habe übrigens Version 0.9.26.2

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von theo »

Dann muss das wohl ein neueres Feature sein. Ich habe Version:
Lazarus 0.9.29 r26057M FPC 2.4.0 i386-linux-gtk 2 (beta)

Damit klappt's.

ftp://ftp.freepascal.org/pub/lazarus/snapshots/" onclick="window.open(this.href);return false;

stephan87
Beiträge: 4
Registriert: Di 8. Jun 2010, 15:01

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von stephan87 »

hm..ich kann das leider nicht installieren, müsste das dem admin sagen. Der hat das bei mir einfach mit irgendeinem Paketmanager installiert. Ich dachte die Versionen die da installiert werden wären up to date. Aber anscheinend nicht.

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von theo »

stephan87 hat geschrieben:Ich dachte die Versionen die da installiert werden wären up to date. Aber anscheinend nicht.
Es sind wahrscheinlich schon die letzten Release Versionen.
An Lazarus wird aber täglich weiterentwickelt, und diese täglich verbesserten (oder manchmal auch verbockten ;-) ) Versionen gibt's in obigem Link oder natürlich auch per SVN.

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von Thomas B. »

Ich glaube in der 0.9.26.-LazVersion für TAChart gab es nur TSeries - bin mir aber nicht ganz sicher.
Wenn Du die TLineSeries Klasse nicht finden kannst, dann mal damit probieren.

Der bessere Weg ist aber der Upgrade auf 0.9.28 oder 0.9.29. Das kann ich Dir nur empfehlen.
Dann gibt es auch einen hilfreichen Serien-Editor (Rechtsklick auf den TChart) und Achentransformationen.

Übrigens nach dem Wechsel von 0.9.28 auf 0.9.29 ist beim Neukomplilieren meines bestehenden Projekts mit einem TChart
dieses gleich bei Programmstart abgestürzt. Abhilfe: Einbindung einer/mehrerer zusätzliche(n/r) Unit(s). Welche das sind, findet
man schnell heraus, wenn von Hand ein neuer TChart implementiert wird, und die IDE automatisch die notwendigen neuen (TAChart)-Units ergänzt.

Benutzeravatar
jwdietrich
Beiträge: 173
Registriert: Mo 20. Okt 2008, 20:50
OS, Lazarus, FPC: macOS 10.4-14.1, Windows 2000-11, Raspbian (L 3.7.0, FPC 3.2.2)
CPU-Target: PowerPC, Intel, ARM
Wohnort: Hattingen, NRW
Kontaktdaten:

Re: TLineSeries wird nicht gefunden / Mehrere Kurven in TChart

Beitrag von jwdietrich »

Zumindest unter neueren Lazarusversionen (z. B. 0.9.30.4) ist es auch erforderlich, X1 bei jedem Klick auf 0 zu setzen, sonst werden die Kurven dennoch als eine einzige hintereinandergehängt:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  TAGraph, TASeries, TAChartUtils;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Chart1: TChart;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  FLine: array[0..50] of TLineSeries;
  x, y, x1, y1, x3, y3: double;
  seriescount: integer = 0;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  Fline[seriescount] := TLineSeries.Create(Chart1);
  Fline[seriescount].ShowLines := True;
  Fline[seriescount].ShowPoints := True;
  {Fline[seriescount].Pointer.Style := psRectangle;}
  Fline[seriescount].Title := 'line';
  Fline[seriescount].SeriesColor := clRed;
  Chart1.AddSeries(Fline[seriescount]);
 
  X1 := 0;
  for i := 1 to 10 do
  begin
    Fline[seriescount].AddXY(x1, y1, '', clGreen);
    X1 := X1 + 1.5;
    if random(2) >= 0.5 then
      Y1 := Y1 + random(10)
    else
      Y1 := Y1 - random(5);
  end;
 
  Inc(seriescount);
 
end;
 
end.

Antworten