TListbox : horizontaler Scrollbalken

Für Fragen von Einsteigern und Programmieranfängern...
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

TListbox : horizontaler Scrollbalken

Beitrag von malabarista »

Bei einer TListbox wird automatisch die ScrollWidth auf einen Wert größer 0 gesetzt.
Unter Linux hat dies keine Auswirkungen, wohl aber unter Windows (Laz 32bit).
Dann wird nämlich immer der horizontale Scrollbalken angezeigt, obwohl er nicht notwendig ist. Und das sieht hässlich aus.
Ich behelfe mir dann immer damit, dass ich die ScrollWidth explizit auf 0 setze. Dann ist er weg.
Kann ich nicht generell bei einer TListbox festlegen, dass kein horizontaler Scrollbalken angezeigt wird (wohl aber ein vertikaler) ?

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

Re: TListbox : horizontaler Scrollbalken

Beitrag von wp_xyz »

malabarista hat geschrieben:Bei einer TListbox wird automatisch die ScrollWidth auf einen Wert größer 0 gesetzt.

Verstehe ich nicht. Ich habe alle mir einfach zugänglichen Lazarus-Versionen bis zurück zu Version 1.0 ausprobiert, und bei allen ist ScrollWidth = 0, wenn eine Listbox aufs Formular gesetzt wird. Entsprechend sehe ich im Normallfall auch keinen horizontalen Scrollbar. Nur wenn Columns > 0 und mehr Spalten nötig sind als unter Columns festgelegt. Win 10/64 bit, aber Lazarus/fpc 32 bit.

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: TListbox : horizontaler Scrollbalken

Beitrag von malabarista »

Bei mir ist Columns immer 1.
Denn ich habe ja eine Spalte. Oder ist dies vielleicht mein Fehler ?

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

Re: TListbox : horizontaler Scrollbalken

Beitrag von wp_xyz »

Auch das ist bei mir anders: Columns ist bei einer neu aufs Formular geklickten Listbox 0. Für das Auftreten des horizontalen Rollbalkens scheint das aber keinen Einfluss zu haben. Hier ist lediglich ausschlaggebend, ob ScrollWidth größer als die Breite der Listbox ist.

Welche Lazarus-Version hast du? Es handelt sich um die Original-Listbox, die mit Lazarus mitkommt, oder eine aus einem Komponenten-Paket?

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: TListbox : horizontaler Scrollbalken

Beitrag von malabarista »

Ich habe:
Windows 7 (64-bit), Laz 32bit.
L1.6.4-1 FPC 3.0.0

Automatisch wird Columns auf 0 gesetzt.

Ich hatte die Columns auf 1 gesetzt, weil ich dachte:es ist ja eine Spalte.

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

Re: TListbox : horizontaler Scrollbalken

Beitrag von wp_xyz »

0 würde ich hier als "automatisch" interpretieren, allerdings fällt mir nichts auf, was da "automatisch" eingestellt wird...

Die Frage bleibt weiterhin, wieso bei dir ScrollWidth nicht 0 ist. Denn auch wenn ich Columns auf 1 setze, ändert sich ScrollWidth nicht.

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: TListbox : horizontaler Scrollbalken

Beitrag von malabarista »

Vorgehensweise:
scrollwidth=0 setzen und anschliessend Columns=1 setzen
projekt compilieren
Lazarus beenden
Lazarus neu starten
dann steht in scrollwidth ein Wert>0 (bei mir 144)

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

Re: TListbox : horizontaler Scrollbalken

Beitrag von wp_xyz »

Irgendwas fehlt in der Beschreibung, beim mir ist am Ende der Prozedur ScrollWidth immer noch 0. Stehen Strings in den Items? Welche?

Ich denke fast, du hast irgendwo in dem Projekt Code, der ScrollWidth auf diesen Wert setzt. Durchläufst du nach dem Laden der Listbox (Form.Loaded ?, FormActivate oder FormShow Events?) eine Schleife, die alle Strings in der Listbox durchläuft, die maximale Stringlänge in Pixeln ermittelt und in ScrollWidth einträgt? Denn das wäre die Art und Weise, wie ich ScrollWidth verwenden würde.

Bitte extrahiere alles in eine kleine Demo und poste das hier (nur pas, lfm, lpi und lpr-Dateien, alles zusammen in einem zip).

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: TListbox : horizontaler Scrollbalken

Beitrag von malabarista »

Anbei ein ganz einfaches Projekt.
Allerdings unter Linux Mint 18.1 64bit.
Jetzt steht in scrollwidth 137 drin.

Dort eine 0 eintragen und dann F9
Dann Lazarus beenden.
Lazarus wieder starten.
Dann steht wieder 137 in scrollwidth.
Dateianhänge
testlistbox.zip
(124.07 KiB) 104-mal heruntergeladen

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: TListbox : horizontaler Scrollbalken

Beitrag von Niesi »

malabarista hat geschrieben:Anbei ein ganz einfaches Projekt.
Allerdings unter Linux Mint 18.1 64bit.
Jetzt steht in scrollwidth 137 drin.

Dort eine 0 eintragen und dann F9
Dann Lazarus beenden.
Lazarus wieder starten.
Dann steht wieder 137 in scrollwidth.



Habe ich ausprobiert - bei mir bleibt es auf "0", der Scrollbalken bleibt auch weg.

Habe eine tListBox hinzugefügt, ScrollWidth ist "0" und bleibt auch so.

Da muss was anderes "faul" sein ...

Beste Grüße

P. S.: Nur unter Windows 7 getestet ...
Zuletzt geändert von Niesi am Do 9. Nov 2017, 15:22, insgesamt 1-mal geändert.
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Re: TListbox : horizontaler Scrollbalken

Beitrag von wp_xyz »

Bei mir steht auch nach dem erneuten Laden die 0 drin (allerdings nur unter Windows getestet).

Kann es sein, dass bei dir AutoSave aus ist (wobei ich jetzt gar nicht weiß, wie man das ausschaltet)? Was passiert, wenn du nach dem Ändern von ScrollWidth auf 0 und vor dem Neucompilieren das Projekt explizit speicherst?

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: TListbox : horizontaler Scrollbalken

Beitrag von malabarista »

So, trotz speichern vor dem Compilieren tritt der Effekt auf.

ABER ich habe mal noch etwas anderes ausprobiert:
ich habe das Projekt gespeichert mit scrollwidth=0
und Lazarus beendet und anschliessend erneut gestartet: Anzeige scrollwidth=137
Dann habe ich die unit1.lfm mit einem Texteditor geöffnet und dort steht kein Scrollwidth drin, d.h. Scrollwidth ist 0.
Bleibt also nur noch die Frage, wo bekommt Lazarus diese 137 her, ohne dass sie in der Datei steht ?

Screenshot anbei.
Dateianhänge
screenshot: Objektinspektor + Texteditor
screenshot: Objektinspektor + Texteditor

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

Re: TListbox : horizontaler Scrollbalken

Beitrag von wp_xyz »

Es geht hier um das Mini-Projekt, das du oben gepostet hast? Nirgendwo zusätzlicher Code, der das machen könnte? Sehr seltsam...

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: TListbox : horizontaler Scrollbalken

Beitrag von malabarista »

Ja, das ist alles.

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

Re: TListbox : horizontaler Scrollbalken

Beitrag von wp_xyz »

Bin jetzt auf meine Mint-VM gegangen (gtk2), und da sehe ich genauso wie du, dass beim Einbauen einer neuen Listbox ins Formular deren ScrollWidth auf einen Wert > 0 gesetzt wird, der der Breite der Listbox entspricht (minus 2 Pixel, --> Clientwidth). Ob in ScrollWidth ein Wert erscheint, hängt also vom Widgetset ab. Dennoch erscheint auch hier unter Linux kein horizontaler Scrollbalken, zumindest solange man unter Scrollwidth keinen Wert einträgt, der größer ist als die ClientWidth der Listbox. Wo ist dann das Problem? Die Regel scheint - widgetset-übergreifend - zu sein: Horizontaler Rollbalken erscheint, wenn ScrollWidth > Listbox.ClientWidth.

Antworten