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?
TChart, durchlaufende Kurve
TChart, durchlaufende Kurve
- Dateianhänge
-
MovingChartProblem.zip
- (1.76 MiB) 323-mal heruntergeladen
Re: TChart, durchlaufende Kurve
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.
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
Re: TChart, durchlaufende Kurve
Vielen Dank!
Auf die Idee wäre ich nie gekommen
Klappt hervorragend, ich hatte schon die unmöglichsten Sachen probiert
Auf die Idee wäre ich nie gekommen

Klappt hervorragend, ich hatte schon die unmöglichsten Sachen probiert

Re: TChart, durchlaufende Kurve
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.
Re: TChart, durchlaufende Kurve
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.
Re: TChart, durchlaufende Kurve
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
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
-
- 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
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.

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