TAChart untypische X-Achse - wie umgehen ?

Rund um die LCL und andere Komponenten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7075
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TAChart untypische X-Achse - wie umgehen ?

Beitrag von af0815 »

Lazarus 4.99 (rev main_4_99-3250-g0f474c78c5) FPC 3.2.2 x86_64-linux-gtk2

Aktueller stable (3.2.2) fpc und Lazarus main
TAChart stable main 2026-01-17 19-58-49.png
TAChart stable main 2026-01-17 19-58-49.png (42.77 KiB) 127 mal betrachtet
Jedes mal exakt gleiches Projekt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: TAChart untypische X-Achse - wie umgehen ?

Beitrag von wp_xyz »

Danke. Hab' mir nun per FPCUpDeluxe FPC/main + Laz/Main in der Linux-VM installiert und konnte den Fehler gleich bestätigen, er tritt sogar bei dem leeren Default-Chart auf, nicht nur unter gtk2, sondern auch unter gtk3 und qt5. Der Fehler war nach kurzem Debuggen schnell gefunden: FPC3.3.1 scheint massive Probleme mit "inline" zu haben, hier war es die FunktionTValuesInRangeParams.CountToStep(ACount: Integer): Double in unit TACustomSource. Entferne hier das "inline" im Interface-Teil, und der Fehler ist weg.

Hier ein kleines Test-Programm, das das nachstellt:

Code: Alles auswählen

program project1;
uses
  Math;
var
  FMin: Double;
  FMax: Double;

function CountToStep(ACount: Integer): Double; inline;
begin
  Result := Power(10, Floor(Log10((FMax - FMin) / ACount)));
end;

begin
  FMin := -1.012269938;
  FMax := +1.012269938;
  WriteLn(CountToStep(13));
end.
Der Output mit FPC 3.2.2 ist der Wert 1, mit FPC 3.3.1 der Wert -12.382, und wenn man das "inline" auskommentiert wieder der Wert 1.

Ich fürchte bei so einem fundamentalen Bug stecken noch einige Bomben in jedem Projekt, das "inline" verwendet.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7075
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TAChart untypische X-Achse - wie umgehen ?

Beitrag von af0815 »

Danke für deine Mühe. Weißt du vielleicht ob das Problem bekannt ist. Weil das kurze Beispiel ist ja eine wirkliche Essenz des Problem.

Für mich heißt das, ich sollte maximal den fixes FPC verwenden.

Edit:
By default, inline procedures are not allowed. Inline code must be enabled using the command-line switch -Si or {$inline on} directive.
Quelle: https://www.freepascal.org/docs-html/ref/refsu77.html
By default, Inline procedures are not allowed. This directive must be specified to use inlined code. The directive is equivalent to the command line switch -Si
Quelle: https://www.freepascal.org/docs-html/prog/progsu36.html

Sollte somit nicht automatisch aktiv sein. Hmm.

Edit2: Ist hier automatisch von Lazarus eingeschalten.
Inline 2026-01-18 16-23-52.png
Inline 2026-01-18 16-23-52.png (102.54 KiB) 70 mal betrachtet
Wenn man es ändert und neu clean kompiliert, ändert sich auch nicht am Projekt - interessant.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: TAChart untypische X-Achse - wie umgehen ?

Beitrag von wp_xyz »

Es gab mal eine Diskussion über Probleme mit "inline", auf der MailingList, im Forum oder im Rahmen eines Commits oder Bug-Reports - nur finde ich das momentan nicht (leider hat sich mit git die Zahl der Orte, wo etwas diskutiert werden kann, vervielfacht...).

Ich denke trotzdem, dass ich einen Bug-Report schreibe. Vorher will ich evtl. aber noch schauen, ob man das Problem vielleicht noch weiter einkreisen kann.

Leider ist TAChart voll von inline-Prozeduren...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7075
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TAChart untypische X-Achse - wie umgehen ?

Beitrag von af0815 »

Was komisch ist, es ändert sich nicht, wenn ich die Einstellung für Inline in Lazarus ändere. Und alles Clean rekompiliere. Damit sollte der Fehler ja weg sein oder habe ich da noch einen Denkfehler.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: TAChart untypische X-Achse - wie umgehen ?

Beitrag von wp_xyz »

af0815 hat geschrieben: Mo 19. Jan 2026, 07:49 ... Einstellung für Inline in Lazarus...
Du meinst die Option "C++-artige Inline-Anweisungen (-Si {$INLINE ON})" in den Projekt-Optionen? Ja, da tut sich bei mir auch nichts, weder nach Änderung in den TAChart-Package-Optionen, noch in den Projekt-Optionen. Die einzigen beiden Arten, den Fehler der Achsen-Labels loszuwerden, sind für mich
- das "inline" in der Deklaration von TValuesInRangeParams.CountToStep (in unit TACustomSource) zu entfernen, oder
- der Unit TACustomSource ein {$INLINE OFF} voranzustellen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7075
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TAChart untypische X-Achse - wie umgehen ?

Beitrag von af0815 »

Sehe, du schreibst gerade einen Bugreport für den fpc. https://gitlab.com/freepascal.org/fpc/s ... sues/41581 Für inline gibt es sogar ein eigenes Label.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten