[gelöst] AutoScale bei 2. Achse in Runtime-Chart

Rund um die LCL und andere Komponenten
Antworten
Linkat
Lazarusforum e. V.
Beiträge: 561
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

[gelöst] AutoScale bei 2. Achse in Runtime-Chart

Beitrag von Linkat »

Hallo,
habe zur Problemlösung ein kleines abgespecktes Beispielprogramm erstellt (s. Anhang). In einer zur Laufzeit erstellten Chart-Komponente sollen die Wertebereiche zweier y-Achsen (links und rechts) mittels AutoScale unabhängig von einander eingestelt werden.

Wenn ich die AutoScale-Checkboxen betätige, dann schaltet der Wertebereich um, aber immer sind beide y-Achsen gleich. Ich bekomme die beiden Achsen einfach nicht "getrennt".

Ich denke der Kern des Problems liegt hier in dem Bereich:

Code: Alles auswählen

  CAT1:=TChartAxisTransformations.Create(Chart);
  CAT2:=TChartAxisTransformations.Create(Chart);
  CATAS1:=TAutoScaleAxisTransform.Create(Chart);
  CATAS2:=TAutoScaleAxisTransform.Create(Chart);
  Chart.AxisList.Axes[0].Transformations:=CAT1;
  Chart.AxisList.Axes[2].Transformations:=CAT2;
 
Aber zum Überprüfen habe ich das Projekt im Anhang.

Für jeden Tipp bin ich dankbar.

Gruß, Linkat
Dateianhänge
AchsenAutoScale.zip
(128.01 KiB) 65-mal heruntergeladen
Zuletzt geändert von Linkat am Di 4. Mär 2014, 13:40, insgesamt 1-mal geändert.
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

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

Re: AutoScale bei 2. Achse in Runtime-Chart

Beitrag von wp_xyz »

Schön, dass du ein Demo-Projekt ausgearbeitet hast, sonst hätte ich dir den falschen Tipp gegeben, aber so bekommst du gleich die richtige Lösung:

Du hast die AxisTransform nicht in die Liste der Transformations eingehängt, und damit wird sie von der Achse, die nur die Transformations, aber nicht die individuelle AxisTransform kennt, ignoriert. Es fehlen lediglich die folgenden Zuweisungen nach dem Schema:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject),
....
  CAT1:=TChartAxisTransformations.Create(Chart);
  CAT2:=TChartAxisTransformations.Create(Chart);
  CATAS1:=TAutoScaleAxisTransform.Create(Chart);
  CATAS1.Transformations := CAT1;                     // Neu
  CATAS2:=TAutoScaleAxisTransform.Create(Chart);
  CATAS2.Transformations := CAT2;                     // Neu
  Chart.AxisList.Axes[0].Transformations:=CAT1;
  Chart.AxisList.Axes[2].Transformations:=CAT2;    
....
 

Linkat
Lazarusforum e. V.
Beiträge: 561
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: AutoScale bei 2. Achse in Runtime-Chart

Beitrag von Linkat »

Hallo wp_xyz,
wie immer prompt, sachkundig und zuverlässig wenn es um die TChart-Komponente geht.

Die Komponente ist hervorragned und sehr flexibel zur graphischen Darstellung von Messwerten. Aber die Komplexität bringt es leider mit sich, dass die Nutzung unüberschaubar wird. Trotz der mittlereweile guten Tutorials im Wiki bleibt man an dem einen oder anderen Problem hängen.

Vielen Dank für die erneute Hilfe. Natürlich ist (zumindest) dieses Problem erstmal gelöst.

Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Antworten