vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · ListBox   |   VB-Versionen: VB4, VB5, VB628.06.01
Horizontaler Scrollbalken in der ListBox

Dieser Tipp zeigt, wie man einer ListBox einen horizontalen Scrollbalken hinzufügt - wenn notwendig.

Autor:   Dieter OtterBewertung:  Views:  19.604 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Warum hat die Standard ListBox eigentlich keinen horizontalen, sondern nur einen vertikalen Scrollbalken? Diese Frage haben sich sicherlich schon viele unter uns gestellt.

Was macht man nun, wenn ein Eintrag innerhalb der ListBox länger ist als die Listbox breit? Nun ja, man fügt mit Hilfe der SendMessage-API Funktion einen horizontalen Scrollbar hinzu - und dasganze nur nach Bedarf!

' zunächst die benötigten API-Deklarationen
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hwnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
Private Const LB_SETHORIZONTAL = &H194

Ein Problem gibt's jetzt aber noch: Die SendMessage-Funktion erwartet als dritten Parameter (wParam) die Breite des längsten Eintrags und zwar in der Maßeinheit Pixel!

Die Breite eines Eintrags kann man ja mit der TextWidth-Funktion ermitteln, und in Pixel umrechnen lässt sich dann der Wert per Screen.TwipsPerPixelX. Also erstellen wir und eine Prozedur, in der der längste Eintrag ermittelt wird - und das sieht dann so aus:

' Längsten Eintrag einer ListBox ermitteln
' und als Ergebnis die Breite in Pixel zurückliefern
Public Function GetListWidth(Liste As ListBox) As Long
  Dim I As Integer
  Dim maxWidth As Long
  Dim Form As Form
 
  ' für "TextWidth" muss die für die ListBox
  ' verwendete Schrift berücksichtigt werden!
  Set Form = Me
  Set Form.Font = List1.Font
 
  maxWidth = 0
  With Liste
    For I = 0 To .ListCount - 1
      If Form.TextWidth(.List(I)) > maxWidth Then _
        maxWidth = Form.TextWidth(.List(I))
    Next I
  End With
 
  ' Ergebnis in Pixel umrechnen
  maxWidth = maxWidth / Screen.TwipsPerPixelX
 
  ' kleine Zugabe
  GetListWidth = maxWidth + 5
End Function

Um nun den Scrollbalken anzuzeigen, muss die SendMessage-Funktion folgendermaßen aufgerufen werden:

' horizontalen Scrollbalken anzeigen
Public Sub ListeSetHorizScrollbar(Liste As ListBox)
  Dim maxWidth As Long
 
  maxWidth = GetListWidth(Liste)
 
  If maxWidth > List1.Width / Screen.TwipsPerPixelX Then
    ' nur wenn Eintrag länger ist als die ListBox breit!
    SendMessage List1.hwnd, LB_SETHORIZONTAL, maxWidth, 0&
  Else
    ' Scrollbalken wieder entfernen
    SendMessage List1.hwnd, LB_SETHORIZONTAL, 0, 0&
  End If
End Sub

Die Prozedur ListeSetHorizScrollbar sollten Sie immer dann aufrufen, wenn der ListBox neue Einträge hinzugefügt oder bestehende Einträge geändert bzw. gelöscht werden, so daß der horizontale Scrollbalken ein- oder ggf. auch wieder ausgeblendet wird.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.