Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [vb6] listbox e barra di scorrimento orizz.

    salve a tutti,
    ho inserito lo strumento listbox all'interno del mio form ma, quando inserisco un "item" (una frase) + lunga del valore di larghezza della listbox non compare la barra di scorrimento orizzontale e quindi non mi fa leggere la frase intera.

    come posso fare x far comparire la barra di scorrimento orizzontale o cmq spezzare la frase in 2 righe?

    grazie x la collaborazione

  2. #2
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao
    codice:
    Private Const LB_SETHORIZONTALEXTENT As Long = &H194
    Private Const LB_GETTEXTLEN As Long = &H18A
    Private Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    
    Private Sub SetHorizontalBar(lstBox As ListBox)
        Dim I As Integer
        Dim lenTxt As Long
        Dim maxLenTxt As Single
        Dim testo As String
        'Recupera la lunghezza massima degli elementi della ListBox.
        For I = 0 To lstBox.ListCount - 1
            lenTxt = SendMessage(lstBox.hwnd, LB_GETTEXTLEN, I, ByVal 0)
            If lenTxt > maxLenTxt Then
                testo = lstBox.List(I)
                maxLenTxt = lenTxt
            End If
        Next I
        maxLenTxt = Me.TextWidth(testo)
        If Me.ScaleMode = vbTwips Then maxLenTxt = maxLenTxt / Screen.TwipsPerPixelX
        'Visualizza la barra di scorrimento orizzontale.
        SendMessage lstBox.hwnd, LB_SETHORIZONTALEXTENT, maxLenTxt, 0&
    End Sub
    Dopo che hai popolato la tua ListBox, richiama la sub passandogli il nome della list: SetHorizontalBar NomeListBox
    Jupy

  3. #3
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Originariamente inviato da dj-_-b spirit
    come posso fare x far comparire la barra di scorrimento orizzontale
    Ricordo di aver letto un articolo...
    Lo trovi qui
    ... e non usare while wend è una sintassi deprecata

  4. #4

    vi ringranzio entrambi, siete stati di grandissimo aiuto

  5. #5
    a distanza di tempo mi sono accorto che il codice che mi ha fornito jupy64 (che ringrazio ancora ) ha un piccolo difetto:

    ho notato che, seppure viene visualizzata la barra di scorrimento orizz., qsta non arriva a mostrare tutto l'item della listbox ma si "mangia" un pezzo dell'ultima lettera, e, se l'item è molto lungo, addirittura non visualizza intere lettere finali.

    come posso fare, utilizzando sempre il codice di sopra, a risolvere qst problema ?

  6. #6
    Utente di HTML.it L'avatar di Mabi
    Registrato dal
    May 2002
    Messaggi
    1,245
    Originariamente inviato da dj-_-b spirit
    come posso fare, utilizzando sempre il codice di sopra, a risolvere qst problema ?
    Hai provato ad utilizzare anche quello inserito nell'articolo che ti ho indicato io? Quell'esempio a me funziona correttamente
    ... e non usare while wend è una sintassi deprecata

  7. #7
    no, in reltà non ci ho provato perchè all'inizio mi ero trovato bene con quello sopra.....
    ...cmq, secondo voi, modificando in qlk modo quel codice si può risolvere il problema?

  8. #8
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, come dall'esempio sul sito postato da Mabi, devi usare l'api
    GetSystemMetrics per determinare la barra verticale, altrimenti ci sono sempre problemi.
    Pertanto la versiona modificata:
    codice:
    Private Const LB_SETHORIZONTALEXTENT As Long = &H194
    Private Const LB_GETTEXTLEN As Long = &H18A
    Private Const SM_CXVSCROLL = 2 
    Private Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long 
    
    
    Private Sub SetHorizontalBar(lstBox As ListBox)
        Dim I As Integer
        Dim lenTxt As Long
        Dim maxLenTxt As Single
        Dim testo As String
        Dim sysScrollWidth As Long
        sysScrollWidth = GetSystemMetrics(SM_CXVSCROLL)     
        'Recupera la lunghezza massima degli elementi della ListBox.
        For I = 0 To lstBox.ListCount - 1
            lenTxt = SendMessage(lstBox.hwnd, LB_GETTEXTLEN, I, ByVal 0)
            If lenTxt > maxLenTxt Then
                testo = lstBox.List(I)
                maxLenTxt = lenTxt
            End If
        Next I
        maxLenTxt = Me.TextWidth(testo)
        If Me.ScaleMode = vbTwips Then maxLenTxt = maxLenTxt / Screen.TwipsPerPixelX
        'Visualizza la barra di scorrimento orizzontale.
        SendMessage lstBox.hwnd, LB_SETHORIZONTALEXTENT, (maxLenTxt + sysScrollWidth) , 0&
    End Sub
    Jupy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.