Tooltiptext sur listbox (1 par item)

Contenu du snippet

Ce code permet d'avoir une infobulle différente pour chaque item d'une ListBox.
Rien de révolutionnaire.

Source / Exemple :


Option Explicit

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

Private Const LB_ITEMFROMPOINT = &H1A9

Private Sub Form_Load()
Dim indice As Integer
    
    For indice = 1 To 10
        List1.AddItem "Item n° " & indice
    Next
    
End Sub

Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim p As POINTAPI
Dim indice As Long

    ' Récupère la position de la souris
    Call GetCursorPos(p)
    
    Call ScreenToClient(List1.hWnd, p)
    
    ' Récupère l'indice de l'élément survolé (grace à l'envoi de LB_ITEMFROMPOINT via SendMessage)
    indice = SendMessage(List1.hWnd, LB_ITEMFROMPOINT, 0&, ByVal ((p.X And &HFF) Or (&H10000 * (p.Y And &HFF))))
    If indice >= 0 Then
        indice = indice And &HFF
        List1.ToolTipText = "Ceci est l'item n°" & indice
    End If
End Sub

Conclusion :


Si vous ne voulez pas vous casser la tête, utilisez une ListView, il y a déjà un ToolTipText par item ;o)
Sinon ceci peut vous servir.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.