Вызов меню по ПКМ в ListBox - VB

Узнай цену своей работы

Формулировка задачи:

Хочу сделать всплывающее меню при клике по отдельному итему листбокса. Для этого нужно знать, находится ли курсор в пределах этого итема. Кроме как по координатам, еще как-нибудь это отследить можно?

Решение задачи: «Вызов меню по ПКМ в ListBox»

textual
Листинг программы
Option Explicit
 
Private Type RECT
  iLeft     As Long
  iTop      As Long
  iRight    As Long
  iBottom   As Long
End Type
 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal ptx As Long, ByVal pty As Long) As Long
 
Private Const LB_ITEMFROMPOINT  As Long = &H1A9
Private Const LB_GETITEMRECT    As Long = &H198
 
Private Sub Form_Load()
    Dim i   As Long
    
    For i = 0 To 10
        lstTest.AddItem "item " & i
    Next
    
End Sub
 
Private Sub lstTest_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim itm As Long
    Dim rc  As RECT
    Dim px  As Long, py As Long
    
    ' Переводим из твипов в пиксели
    px = (X / Screen.TwipsPerPixelX): py = (Y / Screen.TwipsPerPixelY)
    ' Находим ближайший итем
    itm = SendMessage(lstTest.hwnd, LB_ITEMFROMPOINT, 0, ByVal px Or py * &H10000) And &HFFFF&
    ' Находим прямоугольник итема
    SendMessage lstTest.hwnd, LB_GETITEMRECT, itm, rc
    
    If PtInRect(rc, px, py) Then
        Caption = itm
    Else
        Caption = -1
    End If
    
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5