О ListBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

О ListBox

Сообщение Malone32® » 15.03.2005 (Вт) 18:58

Как написать простой (без апи, если возможно) алгоритм: при нажатии правой кнопкой мыши на листбоксе необходимо, чтобы выделился пункт, который находится под курсором (если, конечно, пункт там есть)

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 15.03.2005 (Вт) 21:15

Malone32®
Без API - нельзя.
С ним алгоритм простой
1) Получаем индекс элемента из координат мыши с помощью LBItemFromPt
2) Шлем сообщение listbox'у, чтобы он выбрал соотв. пункт помощью SendMessage c LB_SETSEL

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Сообщение Demonx » 15.03.2005 (Вт) 21:22

Код: Выделить всё
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

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim P As Long
Dim XPosition As Long, YPosition As Long
XPosition = CLng(X / Screen.TwipsPerPixelX)
YPosition = CLng(Y / Screen.TwipsPerPixelY)
P = SendMessage(List1.hWnd, LB_ITEMFROMPOINT, 0, ByVal ((YPosition * 65536) + XPosition))
List1.ListIndex = P
End Sub
Изображение

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 15.03.2005 (Вт) 23:38

Код: Выделить всё
Dim txtheight%

Private Sub Form_Load()
For i = 1 To 30
    List1.AddItem i
Next
Picture1.Visible = False
Picture1.FontName = List1.FontName
Picture1.FontSize = List1.FontSize
txtheight = Picture1.TextHeight("|")
End Sub

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim tmp&
If Button = vbRightButton Then
    tmp = Int(Y / txtheight) + List1.TopIndex
    If tmp < List1.ListCount Then
        List1.ListIndex = tmp
    Else: List1.ListIndex = -1
    End If
End If
End Sub
:roll:
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 16.03.2005 (Ср) 22:28

Спасибо всем


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 152

    TopList