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.
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.