Scrollen im Objectinspektor

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Scrollen im Objectinspektor

Beitrag von siro »

Nach Empfehlung von wp_xyz, möchte ich hier eine BUG-Report veröffentlichen, damit es nicht in Vergessenheit gerät...

Das Problem betrifft das Scrollen im Objektinspektor:

Lazarus Windows Version V1.8.4
und, jedoch mit etwas anderem fehlerhaften Verhalten, die Windows Version Lazarus V2.0.0RC2

Hier wird der Bildschirm nicht rechtzeitig bzw. sogar nicht richtig restauriert wenn man sich in einem
Eigenschftsfeld befindet zum editieren. und den Scrollbalken bewegt.

Ich verweis mal auf meinen Thread:
https://www.lazarusforum.de/viewtopic.php?f=15&t=11876

geprüft auf 2 verschiedenen Rechnern mit Windows 10

Für Gegenmaßnahmen bedanke ich mich schon im voraus.

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

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

Re: Scrollen im Objectinspektor

Beitrag von wp_xyz »

Nein, das liest hier keiner von den Leuten, die das beheben können. Du musst schon im Bug-Tracker posten: https://bugs.freepascal.org/view_all_bu ... oject_id=1, und auf englisch. Falls das ein Problem ist, kann ich das auch posten, nur ich habe meinen Kopf momentan woanders, und es könnte sein, dass ich es vergesse.

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Scrollen im Objectinspektor

Beitrag von siro »

Achso, das wuste und kannte ich noch garnicht, Ich dachte die Entwickler schauen auch hier ein.

Wenn Du Zeit und Lust dafür hast, wäre es nett von Dir, wenn Du es dort reinstellen würdest wp_xyz.
Ich will hier aber keine Aufgaben verteilen, das steht mir nicht zu..... :oops:

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...


siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Scrollen im Objectinspektor

Beitrag von siro »

Guten Morgen und vielen lieben Dank an wp_xyz.
Das hätte ich nie so hinbekommen.

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Scrollen im Objectinspektor

Beitrag von martin_frb »

Bitte mal mit Trunk r59604 testen.
Probleme/Konfirmation bitte hier https://bugs.freepascal.org/view.php?id=34539

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

Re: Scrollen im Objectinspektor

Beitrag von wp_xyz »

Danke, Martin, scheint zu funktionieren. Nur bei sehr schnellem Scrollen verschwindet manchmal der PropertyEditor, aber das ist tolerierbar im Vergleich zum Zustand vorher.

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Scrollen im Objectinspektor

Beitrag von martin_frb »

wp_xyz hat geschrieben:Danke, Martin, scheint zu funktionieren. Nur bei sehr schnellem Scrollen verschwindet manchmal der PropertyEditor, aber das ist tolerierbar im Vergleich zum Zustand vorher.


Verschwindet dauerhaft, oder temporär? Welches Windows? 10,8,7,...

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

Re: Scrollen im Objectinspektor

Beitrag von wp_xyz »

Sowohl Win10 als auch Win7 zeigen den Effekt (zu Win8 habe ich keinen Zugang).

Ist etwas schwer zu reproduzieren, ich habe das Gefühl es hängt davon ab, wie sehr die Maschine anderweitig beschäftigt ist. Aber ich glaube jetzt, der Begriff "Verschwinden" ist falsch, besser wäre "Auftaucnen". Ich meine, es jetzt gut zu sehen, wenn ich die Zelle mit dem Property-Editor nach oben aus dem sichtbaren Fenster des OI scrolle, dann den Rollbalken schnell herunterziehe; während des Scrollens ist, wenn dann der Property-Editor wieder ins Fenster kommt, die der blaue Text-Hintergrund nicht zu sehen, er kommt erst dann, wenn der Rollbalken steht.

Während des Scrollens habe ich immer wieder den Eindruck, dass nicht alles in einem Guss (so wie ein gescrolltes Bitmap) gezeichnet wird, sondern dass der Property-Editor erst im Nachhinein auf das gescrollte Grid gezeichnet wird, weil der Property-Editor etwas auf- und abzittert. Delphi hat das nicht: hier bewegt sich das Grid des Objekt-Inspektor zusammen mit den Property-Editor absolut synchron. Hat das vielleicht mit Double-Buffering zu tun? Ich behaupte mal, das trat zum ersten Mal auf, als Ondrej die große Änderung mit dem Double-Buffering gemacht hat.

In dem Zusammenhang gibt es noch ein zweites ähnliches Problem: Wenn man den Splitter zwischen ObjectTree und ObjectInspektor schnell auf- und abbewegt, gibt es nichts als Ausgabereste - siehe Screenshot. Genauso wieder bei Win10 und Win7, vorübergehend während des Scrollens, verschwindet wieder, wenn der Rollbalken angehalten wird. Ich habe noch ein Laz 1.0 auf der Platte, da sieht man den Fehler auch schon. Ich wollte sehen, ob Delphi das auch macht, aber die schalten den Splitter in den rsLine oder rsPattern ResizeStyle, so dass während des Scrollens gar kein Neuzeichnen stattfindet.
Dateianhänge
OI_scrolling.png

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Scrollen im Objectinspektor

Beitrag von martin_frb »

wp_xyz hat geschrieben:Sowohl Win10 als auch Win7 zeigen den Effekt (zu Win8 habe ich keinen Zugang).
wenn ich die Zelle mit dem Property-Editor nach oben aus dem sichtbaren Fenster des OI scrolle, dann den Rollbalken schnell herunterziehe; während des Scrollens ist, wenn dann der Property-Editor wieder ins Fenster kommt, die der blaue Text-Hintergrund nicht zu sehen, er kommt erst dann, wenn der Rollbalken steht.

Korrekt. In diesem Falle funktioniert ScrollWindowEx nicht vollständig.
Siehe im Bug den Kommentar bzgl: DeferWindowPos.

Im Moment sendet die IDE die neue Pos einfach hinterher selber. Daher die Verzögerung.

Während des Scrollens habe ich immer wieder den Eindruck, dass nicht alles in einem Guss (so wie ein gescrolltes Bitmap) gezeichnet wird, sondern dass der Property-Editor erst im Nachhinein auf das gescrollte Grid gezeichnet wird, weil der Property-Editor etwas auf- und abzittert.

Ja, eigentlich sollte das mit ScrollWindowEx ja nicht passieren. Ist aber auf jeden Fall mit ScrollWindowEx weniger als mit Invalidate.

Müsste man den gesamten message Austausch zwischen IDE und Windows debuggen....

In dem Zusammenhang gibt es noch ein zweites ähnliches Problem: Wenn man den Splitter zwischen ObjectTree und ObjectInspektor schnell auf- und abbewegt, gibt es nichts als Ausgabereste - siehe Screenshot. Genauso wieder bei Win10 und Win7, vorübergehend während des Scrollens, verschwindet wieder, wenn der Rollbalken angehalten wird. Ich habe noch ein Laz 1.0 auf der Platte, da sieht man den Fehler auch schon. Ich wollte sehen, ob Delphi das auch macht, aber die schalten den Splitter in den rsLine oder rsPattern ResizeStyle, so dass während des Scrollens gar kein Neuzeichnen stattfindet.

Ganz anderer Fall.
Hier werden beide Komponenten verschoben, und resized (kein scrolling). Da müsste die LCL/Interface DeferWindowPos lernen. Oder eine andere Möglichkeit ein Parent mit allen Children zu bewegen.

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Scrollen im Objectinspektor

Beitrag von siro »

Invalidate ist oftmals SEHR langsam, wenn ich sofortige Reaktion haben möchte nutze ich Refresh.
Ich vermute dass hier das Problem herrührt ?

Ich hab in fast allen meinen Komponenten Invalidate durch Refresh ersetzt sonst hinkten die Zeichenoperation ständig hinterher....
Mit ScrollWindowEx hatte ich damals auch Probleme, ich bin grad am Suchen, find das irgendwie nicht mehr. :roll:
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Scrollen im Objectinspektor

Beitrag von martin_frb »

Das Problem ist in diesem Falle nicht ScrollWindowEx, sondern eine Kombination aus verschieden anderen Sachen.

RePaint brauch genau soviel Zeit wie Invalidate. RePaint wird nur zeitnah ausgefuehrt, dafuer werden dann andere Dinge nach hinten verschoben...

Zum testen, patch attached.
Dateianhänge
objectinspector_faster_paint.pp.patch
(3.94 KiB) 180-mal heruntergeladen

Antworten