Detekce položky ListBoxu pod kurzorem myši

Postup:
Deklarujte v deklarační části formuláře:

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 Const LB_ITEMFROMPOINT = &H1A9

Na formulář přidejte ListBox. Na jeho událost MouseMove:

Private Sub List1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)

   Dim lXPoint As Long
   Dim lYPoint As Long
   Dim lIndex As Long

   If Button = 0 Then
      lXPoint = CLng(X / Screen.TwipsPerPixelX)
      lYPoint = CLng(Y / Screen.TwipsPerPixelY)
      With List1
         lIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, ByVal _
                           ((lYPoint * 65536) + lXPoint))
         If (lIndex >= 0) And (lIndex <= .ListCount) Then
            .ToolTipText = .List(lIndex)
         Else
            .ToolTipText = ""
         End If
      End With
   End If

End Sub

Ještě je třeba na událost Form_Load přidat nějaké položky do ListBoxu:

Private Sub Form_Load()

   List1.AddItem "První položka"
   List1.AddItem "druhá položka"
   List1.AddItem "Třetí položka"
   List1.AddItem "Čtvrtá položka"
   List1.AddItem "Pátá položka"

End Sub

Zpět

Autor: The Bozena