TChart, durchlaufende Kurve

Rund um die LCL und andere Komponenten
Antworten
yogie
Beiträge: 14
Registriert: Di 6. Dez 2022, 11:27

TChart, durchlaufende Kurve

Beitrag von yogie »

Hallo zusammen,
es gibt ein Problem mit der Darstellung einer „durchlaufenden“ Kurve mit TChart.

Wenn die horizontale Achse eingeschaltet ist, „flattert“ die rechte Kante des Charts.
Bei ausgeschalteter horizontaler Achse ist die rechte Kante stabil.
Bei den Tests bin ich auch auf TChartLiveView genau für diesen Zweck gestoßen.
Auch hier flattert der rechte Rand. Gibt es da Abhilfe?
Dateianhänge
MovingChartProblem.zip
(1.76 MiB) 323-mal heruntergeladen

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

Re: TChart, durchlaufende Kurve

Beitrag von wp_xyz »

Der vom Chart benötigte Platz wird laufend neu berechnet, und wenn, je nach Datenlage, das letzte Label an der x-Achse mehr oder weniger über die Achse hinausragt, wird entsprechend die Achse verkürzt, und das sieht man als "Springen" des rechten Chart-Randes.

Du kannst das verhindern, indem du eine rechte Achse erzeugst, die dem letzten x-Achsenlabel ausreichend Platz zur Verfügung stellt: Rechtsklick auf AxisList im Objektbaum des Objekt-Inspektors > "Eintrag hinzufügen" > die neue Achse im Objektbaum anklicken > "Alignment = calRight". Damit bleibt der rechte Chart-Rand bei Änderungen der x-Achse stehen. Wenn du die rechte Achsen nicht sehen willst, musst du ihr Marks.Visible auf false setzen. Damit trotz der fehlenden rechten Achsenlabel nun noch Platz zur Verfügung steht, musst du das LabelSize der neuen Achse auf einen ausreichend großen Wert setzen (z.B. 20), so dass das letzte x-Achsenlabel nicht wieder über die Bounds des Chart herausragen kann.
Dateianhänge
flatternde rechte Achse.zip
(2.98 KiB) 333-mal heruntergeladen

yogie
Beiträge: 14
Registriert: Di 6. Dez 2022, 11:27

Re: TChart, durchlaufende Kurve

Beitrag von yogie »

Vielen Dank!
Auf die Idee wäre ich nie gekommen :(
Klappt hervorragend, ich hatte schon die unmöglichsten Sachen probiert :)

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

Re: TChart, durchlaufende Kurve

Beitrag von wp_xyz »

Ich muss mir das bei Gelegenheit einmal näher ansehen. Es gibt noch ein Property MarginExternals, aber das wird offenbar bei der Platzberechnung einfach mal pauschal abgezogen, so dass das letzte x-Achsenlabel nicht in den damit reservierten Platz hineinragen kann.

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

Re: TChart, durchlaufende Kurve

Beitrag von wp_xyz »

Jetzt habe ich mir das nochmal angesehen. Ja, es geht auch einfacher: mit Chart.Margins.Right = ca 10 rückt der letzte Datenpunkt und damit auch das letzte Achsen-Label um 10 Pixel nach links, so dass mehr Platz für das Achsenlabel bleibt, und das Flattern hört auf. Nachteil: die Kurve geht rechts halt nicht bis zum Rand.

yogie
Beiträge: 14
Registriert: Di 6. Dez 2022, 11:27

Re: TChart, durchlaufende Kurve

Beitrag von yogie »

Sehr schön, die Komponente ist halt sehr vielseitig
und zumindest mir erschließen sich solche "Tricks" nicht
so ohne weiteres. Ich stelle gerade eine größere Anwendung
von Delphi 6 auf Lazarus um. Unter D6 war SDL (Lohninger)
im Einsatz, da kannte ich halt alle Möglichkeiten.

Nochmal Danke

TSchnuckenbock
Beiträge: 126
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: TChart, durchlaufende Kurve

Beitrag von TSchnuckenbock »

yogie, deswegen haben wir hier ja den wp_xyz. ;-)

Ich staune auch immer wieder und habe viele seiner Beispiel-Projekte bei mir auf Festplatte gebunkert.
Danke dafür.

Antworten