Tooltiptext qui affiche l'item d'un listbox que survole la souris

Description

Salut
J'ai trouvé sur code sur http://blackbeltvb.com (en anglais facile)
Je vous conseille d'aller y faire un tour : Section FAQ = Pas mal de petits exemples bien utiles.

Je l'ai tout bien commenté en français rien que pour vous ;-)
Bref, ce petit code permet de faire apparaître l'Item d'un ListBox dans le ToolTipText (texte qui s'affiche juste à côté de la souris quand vous survoler un objet).

Ceci est bien pratique, par exemple, pour afficher l'Item entier alors que la ListBox est trop étroite.

Source / Exemple :


' Avant d'insérer ces lignes dans un projet, insérez une ListBox sur une Form.
'--------------------------------------------------------------------------------------

Option Explicit

' Idée récupérée sur l'excellent site http://blackbeltvb.com (en anglais facile)
' Vous y trouverez une ribambelle de petits exemples (Section FAQ)
' D'autres codes biens aléchants aussi, mais payants

' Jack, jacques.millet@developers-association.org

Const LB_GETITEMHEIGHT = &H1A1
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 Sub Form_Load()

    ' En guise d'exemple, on va charger dans une ListBox le
    '   contenu du répertoire en cours.
    
    Dim Temp As String, i As Integer

    ' Pour mettre en évidence le côté pratique de cette routine,
    '   il vaut mieux que la ListBox ait des dimensions réduites
    List1.Width = 1200
    
    ' Compte le nombre d'items, 'cause List ne peut pas avoir plus de 32767 éléments
    i = 0
    
    ' Initialise le listing du répertoire
    Temp = Dir(App.Path & "\*.*")
    Do While (Temp <> "") And (i < 32000)
        ' Ajoute ce fichier à la liste
        List1.AddItem Temp
        i = i + 1
        Temp = Dir()
        DoEvents
    Loop
    
End Sub

Private Sub List1_MouseMove(Button As Integer, _
                            Shift As Integer, _
                            X As Single, Y As Single)
    
    ' Le dimensionnement en Static permet de garder le contenu de
    '   la variable entre deux exécutions
    
    Static bInitialisé As Boolean, lIndexPrécédent As Long
    Dim lPositionY As Long, lHauteurItem As Long, lIndex As Long
    
    ' La souris vient de bouger sur notre ListBox
    ' On récupère la coordonnée Y de la souris (en twips)
    '   (Cette coordonnée est relative à la ListBox)
    lPositionY = Y \ Screen.TwipsPerPixelY
    ' On demande à la ListBox de renvoyer la hauteur d'un Item
    lHauteurItem = SendMessage(List1.hwnd, LB_GETITEMHEIGHT, 0, ByVal 0)
    ' On calcule la ligne correspondante en divisant la coordonnée
    '   par la hauteur d'un Item, auquel on ajoute l'Index du
    '   premier Item visible de la ListBox
    lIndex = lPositionY \ lHauteurItem + List1.TopIndex
    
    ' Pour éviter de réécrire sans cesse le ToolTipText, on mémorise
    '   l'index que l'on vient de traiter et on ne répetera pas la
    '   séquence si cet index est inchangé
    If Not bInitialisé Or lIndexPrécédent <> lIndex Then
        ' Mémorise qu'on a déjà fait cette recherche au moins une fois
        bInitialisé = True
        ' Mémorise l'index traité
        lIndexPrécédent = lIndex
        ' Comme texte du ToolTipText, on va coller le texte de l'item
        '   de la liste, mais cela pourrait être n'importe quoi d'autre
        List1.ToolTipText = List1.List(lIndex)
    End If
    
End Sub

Codes Sources

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.