Советы тем, кто программирует на Visual Basic

Листинг 1

Attribute VB_Name = "ListMenu"
Option Explicit
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
Const LB_GETITEMHEIGHT = &H1A1

Public Sub ListMenuMouse(cl As Control, fm As Form, _
   Y As Single)
   '
   ' Выделение текущей позиции списка
   ' в соответствии с перемещением курсора мыши
   Dim ItemHeight As Long, NewIndex As Long
   With cl
       ' Высота элемента списка в пикселах
       ItemHeight = SendMessage(.hWnd, LB_GETITEMHEIGHT, _
           0, 0)
       ' Преобразование из пикселов в твипы
       ItemHeight = fm.ScaleY(ItemHeight, vbPixels, vbTwips)
       ' Вычисление индекса элемента списка
       NewIndex = .TopIndex + (Y \ ItemHeight)
       ' Проверка -- не вышел ли индекс за пределы списка?
       If NewIndex < .ListCount Then .ListIndex = NewIndex
   End With
End Sub

возврат

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует