TaChart Achsenbeschriftung als "integer" Zahlen..

Rund um die LCL und andere Komponenten
artelogic
Beiträge: 26
Registriert: Mi 20. Apr 2022, 12:42

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von artelogic »

Bin jetzt mal in den Source (vom Chart) eingetaucht und musste feststellen, dass da der Hund nicht begraben ist. Hätte ich vielleicht präziser mit "in TChart.PrepareAxis nicht begraben ist" sagen können.

Neue Erkenntnis: wenn AxisVisible = False, dann nur EIN Paint.

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

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von wp_xyz »

Als erstes würde ich den Chart so groß machen, dass eine deutliche Verzögerung auftritt. Dann einen Breakpoint am Anfang von TChart.Draw setzen. Wenn des Programm dort angehalten hat, mit F8 Zeile für Zeile weitergehen. Es müsste irgendwo eine Zeile geben, bei der es etwas länger dauert, bis IDE/Debugger wieder bedienbar werden.

Wenn du so eine Zeile gefunden hast, kannst du in einem neuen Run mit F7 in diese Prozedur reingehen und wieder mit F8 Zeile für Zeile durchsteppen.

Ein möglicher Verdacht meinerseits: DisplaySeries und dort AxisList.Draw, wo die Achsen gezeichnet werden. Aber nicht nur gezeichnet, sondern vorher werden auch die Achsenmarkierungen berechnet. Da ist viel Arithmetik drin, und das könnte bei einem bzgl Floating-Point schwachen Prozessor ein Bottleneck sein. Daher auch meine erste Idee, die automatische Skalierung mit Hilfe der ListChartSource auszuschalten.

artelogic
Beiträge: 26
Registriert: Mi 20. Apr 2022, 12:42

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von artelogic »

Genau das habe ich ja gemacht, sonst wüsste ich ja nicht, dass die Zeit zwischen den beiden Paints vergeht. Aber inzwischen hab ich noch heraus gefunden, dass es gar nicht die Achsen selbst sind, sondern das Grid. Ich forsche weiter...

artelogic
Beiträge: 26
Registriert: Mi 20. Apr 2022, 12:42

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von artelogic »

Und wenn ich den Style (des Grids) auf psSolid (oder andere "solide") stelle, gibt es auch keine Verzögerung. Mir würde das jetzt als Workaround reichen. Aber interessant ist es dennoch.

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

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von wp_xyz »

Ah, langsam wird's... Pen.Style psSolid ist natürlich ohnehin der schnellste, und ich finde, das sieht sogar besser aus als psDot, vor allem wenn man eine dezente graue Farbe wählt.

Nochmals zu psDot: Ich kann mir das nie merken, aber TPen hat diese Eigenschaft "Cosmetic", und eine von den beiden boolean Einstellungen ist sehr viel langsamer als die andere. Schalte beim Gitter doch mal auf psDot zurück und nimm den anderen Wert von Cosmetic.

artelogic
Beiträge: 26
Registriert: Mi 20. Apr 2022, 12:42

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von artelogic »

Ja, mit Cosmetic auf False geht es deutlich schneller, aber immer noch viel langsamer als psSolid. Damit könnte man ggf notfalls leben. Aber da ich es genauso sehe wie du, nämlich dass psSolid in bspw clSilver sogar schöner ist...

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

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von wp_xyz »

Es wäre interessant, dem Problem näher auf den Grund zu gehen. Eigentlich müsste ein kleines Programm doch ähnlich langsam ablaufen, in dem - sagen wir - 10 horizontale und 10 vertikale Linien auf einem formatfüllenden Formular gezeichnet werden. Sind die vertikalen langsamer als die horizontalen? Gibt es einen Unterschied, wenn man die Linien zuerst in ein genauso großes Bitmap malt und dieses dann auf das Formular kopiert?

artelogic
Beiträge: 26
Registriert: Mi 20. Apr 2022, 12:42

Re: TaChart Achsenbeschriftung als "integer" Zahlen..

Beitrag von artelogic »

Dauert genauso lange. Horizontal oder vertikal spielt dabei keine Rolle. Ohne es gemacht zu haben: wenn man eine Bitmap damit füllt, wird das ähnlich lange dauern. Das kopieren der Bitmap auf den Control.Canvas wird sicherlich schnell gehen. Wenn sich also die Größe des Controls (hier Charts) nicht ändert, könnte das eine Lösung sein.
Aber da ich mit GTK2 unterwegs bin, was eher veraltet ist, und wir nicht wissen, ob die Nachfolger überhaupt ähnlich langsam an der Stelle sind, würde ich da jetzt nicht allzu viel Energie reinstecken. Allerdings ist es unter GTK2 auf nem Intel so schnell, dass man da keinen Unterschied zwischen psDot und psSolid bemerkt.

Antworten