[gelöst] SynEdit - ScrollPastEOL - Problem

Rund um die LCL und andere Komponenten
Antworten
TBug
Beiträge: 165
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

[gelöst] SynEdit - ScrollPastEOL - Problem

Beitrag von TBug »

Hallo zusammen,

ich habe das Problem, dass in der Lazarus-Version 2.2.4 die SynEdit-Komponente nicht mehr ordnungsgemäß funktioniert, wenn die Option eoScrollPastEOL deaktiviert ist.

Es erscheint dann keine Scrollbar, wenn der Text länger wird, als der sichtbare Bereich und der Text wird nicht gescrollt, wenn der Cursor nach hinten bewegt wird.

EinGegentest mit der gleichen Anwendung, welche mit 2.0.10 kompiliert ist, zeigt ein normales Verhalten.

Ich habe im Anhang ein kleines Beispiel mit zwei SynEdits (einmal mit und einmal ohne eoScrollPastEOL) angefügt.

Kann dies bitte jemand gegenchecken, da ich im "meinem" Lazarus, wie in vielen Komponenten auch in den SynEdit-Dateien, eigene Anpassungen eingefügt habe.

Ich möchte ausschließen können, dass die aktuellen Original-Änderungen (seit 2.2.0) nicht mit meinen Änderungen zusammenpassen und so der Fehler entsteht.


vielen Dank vorab
Dateianhänge
project1.zip
(1.18 MiB) 18-mal heruntergeladen
Zuletzt geändert von TBug am Mi 12. Okt 2022, 21:20, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 9580
Registriert: Mo 11. Sep 2006, 19:01

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von theo »

Kann kein Problem erkennen.
Lazarus 2.2.4 (rev Unknown) FPC 3.2.2 x86_64-linux-gtk2

speol.png
speol.png (19.79 KiB) 494 mal betrachtet

TBug
Beiträge: 165
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von TBug »

Hallo theo,

hast Du das Verhalten des unteren SynEdits getestet?

Dies ist bei mir das Problemkind, da dort eoScrollPastEOL deaktiviert ist.

Kommst Du dort an das Zeilenende, wenn der Text länger als die Anzahl der sichtbaren Zeichen ist?

Benutzeravatar
theo
Beiträge: 9580
Registriert: Mo 11. Sep 2006, 19:01

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von theo »

Wie gesagt, kein Problem hier
Bin aber auf Linux.

TBug
Beiträge: 165
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von TBug »

Hm,

dann werde ich mich Wohl oder Übel mal auf die Suche begeben müssen.

Nun ist mir auch noch aufgefallen, dass im unteren SynEdit der Doppelklick nicht die Zeile selektiert. Irgendetwas wird, sowohl bei Tastatureingaben als auch bei Mausaktionen "verschluckt", wenn eoScrollPastEOL nicht gesetzt ist.

Schade, dass sich nicht noch mehr gemeldet haben!
.

sstvmaster
Beiträge: 538
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.4
CPU-Target: 32+64bit
Wohnort: Dresden

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von sstvmaster »

Habe das bei mir jetzt auch mal getestet. Mit deiner Exe habe ich das gleiche Problem.
Wenn ich das Projekt neu Kompiliere funktioniert wie es soll, x32 wie x64.

Bei mir: Win10 x64, Laz 2.2.4, FPC 3.2.2
LG Maik

Windows 10,
- Lazarus 2.2.4 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.5 (fixes) + fpc 3.3.1 (main/trunk)

TBug
Beiträge: 165
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von TBug »

Hallo Maik,

danke fürs Testen.

Wie befürchtet fand ich den Fehler in einer von mir geänderten Funktion .GetLengthOfLongestLine der Klasse TSynEditStringTabExpander in der Datei SynEditTextTabExpander.

Diese hatte ich vor ein paar Tagen (ich hatte dies glatt vergessen), als ich auf die 2.2.4 umgestiegen bin blindgelegt, da ich nach dem Ausführen von SynEdit2.ShareTextBufferFrom(SynEdit1); immer Zugriffsverletzungen erhalten hatte.

So, also eoScrollPastEOL macht nun wieder keine Probleme mehr, aber die Zugriffsverletzungen sind beim Teilen des TextBuffers wieder da.

Ich habe nun ein wenig weiter geforscht und festgestellt, dass der Fehler nur auftritt, wenn der Text 100 oder mehr Zeilen hat.

Ich habe auch hierfür ein kleines Testprogramm angehangen.
Sobald man auf den Share-Button drückt, dann bekomme ich eine Zugriffsverletzung bei 100 oder mehr Zeilen. Bis 99 ist alles in Ordnung.

Könnte eventuell jemand auch dieses Problem testen, damit ich weis, ob ich den Fehler in meinem geänderten Code suchen muss, oder aber es ein grundsätzlicher Bug im Lazarus-Code ist.

Danke.
Dateianhänge
project1.zip
(1.18 MiB) 19-mal heruntergeladen

dj_leinad
Beiträge: 13
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win8.1pro (Laz 2.2.4 / FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: CH

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von dj_leinad »

Genau gleiches Resultat bei meinen Tests. Bei 99 lines ist alles Ok, und bei 100 lines knallts.

Env.: Win8.1Pro / Lazarus 2.2.5 / FPC 3.2.3

LG Daniel

Benutzeravatar
theo
Beiträge: 9580
Registriert: Mo 11. Sep 2006, 19:01

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von theo »

Ja, das kracht hier auch.
So etwas wurde schon mal besprochen, habe aber im Bugtracker nichts gefunden.

Schreib doch einen Bug Report oder finde den Fehler selber.

EDIT: Der Workaround ist relativ einfach. Der mag nicht, wenn da nichts drin steht im SynEdit2. So geht es bei mir.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Enabled := false;
  Button2.Enabled := true;
  SynEdit2.Text:=' test';
  SynEdit2.ShareTextBufferFrom(SynEdit1);
  SynEdit2.Invalidate;
end;  
Jetzt könnte man noch versuchen herauszufinden, warum da so ist. :wink:

TBug
Beiträge: 165
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: SynEdit - ScrollPastEOL - Problem

Beitrag von TBug »

Hallo zusammen,

ich danke Euch ersteinmal fürs Testen.
theo hat geschrieben:
Mi 12. Okt 2022, 10:10
EDIT: Der Workaround ist relativ einfach. Der mag nicht, wenn da nichts drin steht im SynEdit2. So geht es bei mir.
Danke auch für den Workaround, welcher mir auf die Schnelle weiterhilft.
theo hat geschrieben:
Mi 12. Okt 2022, 10:10
Schreib doch einen Bug Report oder finde den Fehler selber.
Ich war ja schon dabei den Fehler zu suchen und hatte aus diesem Grund die Passage in der oben genannten Funktion der Klasse TSynEditStringTabExpander entfernt.

Nach ein paar Tagen ist mir dann bei der Weiterentwicklung einer meiner Projekte eben das eoScrollPastEol Problem über den Weg gelaufen, was ich aber nicht in Zusammenhang mit der Fehlersuche an ShareTextBufferFrom gebracht hatte.

Ich muss mir das aber nochmals genauer anschauen, denn beim Workaround kann es nicht bleiben. Bin sowieso gerade am SynEdit dran, da das experimentelle Wrap-Plugin auch noch diverse Probleme hat, die es zu lösen gilt, solange sie seitens der Lazarusentwicklung nicht gelöst sind und das Plugin nicht "stable" ist.


nochmals vielen, vielen Dank.
.

Antworten