TListbox : horizontaler Scrollbalken

Für Fragen von Einsteigern und Programmieranfängern...

TListbox : horizontaler Scrollbalken

Beitragvon malabarista » 9. Nov 2017, 10:16 TListbox : horizontaler Scrollbalken

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) ?
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 9. Nov 2017, 10:26 Re: TListbox : horizontaler Scrollbalken

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.
wp_xyz
 
Beiträge: 2282
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 9. Nov 2017, 10:37 Re: TListbox : horizontaler Scrollbalken

Bei mir ist Columns immer 1.
Denn ich habe ja eine Spalte. Oder ist dies vielleicht mein Fehler ?
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 9. Nov 2017, 10:55 Re: TListbox : horizontaler Scrollbalken

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?
wp_xyz
 
Beiträge: 2282
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 9. Nov 2017, 11:28 Re: TListbox : horizontaler Scrollbalken

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.
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 9. Nov 2017, 11:57 Re: TListbox : horizontaler Scrollbalken

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.
wp_xyz
 
Beiträge: 2282
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 9. Nov 2017, 12:57 Re: TListbox : horizontaler Scrollbalken

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)
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 9. Nov 2017, 13:56 Re: TListbox : horizontaler Scrollbalken

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).
wp_xyz
 
Beiträge: 2282
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 9. Nov 2017, 14:11 Re: TListbox : horizontaler Scrollbalken

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Niesi » 9. Nov 2017, 14:39 Re: TListbox : horizontaler Scrollbalken

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 9. Nov 2017, 15:22, insgesamt 1-mal geändert.
Niesi
 
Beiträge: 9
Registriert: 26. Jun 2016, 18:44

Beitragvon wp_xyz » 9. Nov 2017, 14:42 Re: TListbox : horizontaler Scrollbalken

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?
wp_xyz
 
Beiträge: 2282
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 9. Nov 2017, 16:34 Re: TListbox : horizontaler Scrollbalken

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 9. Nov 2017, 23:18 Re: TListbox : horizontaler Scrollbalken

Es geht hier um das Mini-Projekt, das du oben gepostet hast? Nirgendwo zusätzlicher Code, der das machen könnte? Sehr seltsam...
wp_xyz
 
Beiträge: 2282
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 10. Nov 2017, 09:16 Re: TListbox : horizontaler Scrollbalken

Ja, das ist alles.
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 10. Nov 2017, 09:56 Re: TListbox : horizontaler Scrollbalken

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.
wp_xyz
 
Beiträge: 2282
Registriert: 8. Apr 2011, 08:01

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried