TAChart untypische X-Achse - wie umgehen ?

Rund um die LCL und andere Komponenten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7073
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) 82 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: 5355
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: 7073
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) 25 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: 5355
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...

Antworten