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

Soyez le premier à donner votre avis sur cette source.

Vue 7 335 fois - Téléchargée 638 fois

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

Ajouter un commentaire Commentaires
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
salut,
également faisable avec LB_ITEMFROMPOINT, peut-être plus simple...

en attendant j'embarque ^^
merci Jack ;)
Messages postés
215
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
7 septembre 2007
1
super commenté, tres accessible ...
non rien a dire nickel
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
En effet, tu as l'oeil. Ca a merdouillé quand j'ai changé le nom des variables. C'est maintenant corrigé (le Zip était bon).
Il faut lire, bien sûr, Screen.TwipsPerPixelY

Merci NewSky
Messages postés
86
Date d'inscription
dimanche 27 janvier 2002
Statut
Membre
Dernière intervention
20 février 2009

je pense qu'il y a un ptt pb ds ton code :

-> lPositionY = Y Screen.TwipsPerPixelPositionY

il y a qqch qui va po. J'ai po tros eu le tps de regarder mais je te conseille de le revoir. Sinon, ça a l'air po mal.

Bonne continuation

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.