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

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

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

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

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

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Type RECT
  4.   iLeft     As Long
  5.   iTop      As Long
  6.   iRight    As Long
  7.   iBottom   As Long
  8. End Type
  9.  
  10. 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
  11. Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal ptx As Long, ByVal pty As Long) As Long
  12.  
  13. Private Const LB_ITEMFROMPOINT  As Long = &H1A9
  14. Private Const LB_GETITEMRECT    As Long = &H198
  15.  
  16. Private Sub Form_Load()
  17.     Dim i   As Long
  18.    
  19.     For i = 0 To 10
  20.         lstTest.AddItem "item " & i
  21.     Next
  22.    
  23. End Sub
  24.  
  25. Private Sub lstTest_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  26.     Dim itm As Long
  27.     Dim rc  As RECT
  28.     Dim px  As Long, py As Long
  29.    
  30.     ' Переводим из твипов в пиксели
  31.    px = (X / Screen.TwipsPerPixelX): py = (Y / Screen.TwipsPerPixelY)
  32.     ' Находим ближайший итем
  33.    itm = SendMessage(lstTest.hwnd, LB_ITEMFROMPOINT, 0, ByVal px Or py * &H10000) And &HFFFF&
  34.     ' Находим прямоугольник итема
  35.    SendMessage lstTest.hwnd, LB_GETITEMRECT, itm, rc
  36.    
  37.     If PtInRect(rc, px, py) Then
  38.         Caption = itm
  39.     Else
  40.         Caption = -1
  41.     End If
  42.    
  43. End Sub

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут