Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Есть вопрос по ListBox, помогите кто может

6.0K
12 апреля 2004 года
Wowan
7 / / 12.04.2004
Как сделать, что бы правой кнопкой мыши можно было выделить (выбрать) необходимый элемент из списка в ListBox.
Заранее благодарен.
266
12 апреля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Wowan
Как сделать, что бы правой кнопкой мыши можно было выделить (выбрать) необходимый элемент из списка в ListBox.
Заранее благодарен.


Немного не понял. Тоесть, ты хочешь, чтобы обрабатывался клик для левши?

266
12 апреля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by mhaturov

Немного не понял. Тоесть, ты хочешь, чтобы обрабатывался клик для левши?


К сожелению, или кодом отлавливать координаты мыши и устанавливать фокус в элемент, или через API:{

3.7K
12 апреля 2004 года
dedtolya
41 / / 12.10.2003
Цитата:
Originally posted by Wowan
Как сделать, что бы правой кнопкой мыши можно было выделить (выбрать) необходимый элемент из списка в ListBox.
Заранее благодарен.



Можно правой, можно двойным кликом или комбинацией клавиш и т.д неважно какой дрыг даст результат.
Может так - говорим волшебное слово (пока не знаю какое) и получаем:
With ListBox1
результат=.List(.ListIndex,i)
End With

648
15 апреля 2004 года
Tiraspolsky
220 / / 23.07.2003
Цитата:
Originally posted by dedtolya


Можно правой, можно двойным кликом или комбинацией клавиш и т.д неважно какой дрыг даст результат.
Может так - говорим волшебное слово (пока не знаю какое) и получаем:
With ListBox1
результат=.List(.ListIndex,i)
End With



Ты чего мудришь-то? Жми левую кнопку или делай двойной клик (опять хе левой) и получишь волшебный результат.

3.7K
15 апреля 2004 года
dedtolya
41 / / 12.10.2003
Цитата:
Originally posted by Tiraspolsky


Ты чего мудришь-то? Жми левую кнопку или делай двойной клик (опять хе левой) и получишь волшебный результат.



Я имел ввиду обработку событий. Для ЛистБокс уже имеется встроенных 14. Можно выбрать любую. Если хочеться чего-то необычного то пишем свою процедуру.
Private Sub Волшебное_слово()

'код
End Sub
Успехов

266
15 апреля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by dedtolya


Я имел ввиду обработку событий. Для ЛистБокс уже имеется встроенных 14. Можно выбрать любую. Если хочеться чего-то необычного то пишем свою процедуру.
Private Sub Волшебное_слово()

'код
End Sub
Успехов


Кстати, попробуй объявить Лист Бокс поздним связыванием. И с событиями.

3.7K
16 апреля 2004 года
dedtolya
41 / / 12.10.2003
Цитата:
Originally posted by mhaturov

Кстати, попробуй объявить Лист Бокс поздним связыванием. И с событиями.

1


Не буду пробовать, оно мне ненать, и не имеет ни какого отношения к заданному вопросу.

Wowan, думаю, что это то, что надо.

Private Sub ListBox1_Click()
Dim результат as String
Dim i As Integer
'i - инндекс колонки
With ListBox1
результат=.List(.ListIndex,i)
End With
'продолжение кода
End Sub

Повторюсь, что иимеется 14(приведеных ниже)встроенных событый.
Насчет любой, для данного случая, так это конечно -нет. Надо выбрать наиболее подходящее.
1. BeforeDragOver
2. BeforeDropOrPaste
3. Change
4. Click()
5. DblClick
6. Error
7. GotFocus
8. KeyDown
9. KeyPress
10.KeyUp
11.LostFocus
12.MouseDown
13.MouseMove
14.MouseUp

Успехов

1.9K
17 апреля 2004 года
Putch
64 / / 22.02.2003
Цитата:
Originally posted by Wowan
Как сделать, что бы правой кнопкой мыши можно было выделить (выбрать) необходимый элемент из списка в ListBox.
Заранее благодарен.






Я думаю этот вопрос можно решить через API немного нагроможденно но зато вполне работоспособно.
В дальнейшем примере я подменяю правую клавишу при клике не листбокс левой и таким образом происходит выделение нужного элемента листбокса правой клавишей.



'''''''''
''ФОРМА''
'''''''''
Private Sub Form_Load()
Hook (List1.hwnd) 'Листбокс должен быть на форме
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHook (List1.hwnd) 'Это надо чтобы не глючило
End Sub
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox Button 'А тут все по прежнему
End Sub




''''''''''
''МОДУЛЬ''
''''''''''
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const GWL_WNDPROC = (-4)

' События мыши
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205

Dim lpPrevWndProc As Long
Public Sub Hook(hwnd As Long)
'Ставим хук
lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHook(hwnd As Long)
'Возвращаем все назад
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next 'Если Basic начинает отлаживать то что находится в этой поцедуре то он вылетает по этому и ставим Resume Next
Select Case uMsg
Case WM_RBUTTONDOWN
Call WindowProc(hwnd, WM_LBUTTONDOWN, wParam, lParam) ' Обманываем окно и говорим: "Нет это не правая клавиша была а левая"
Case WM_LBUTTONDOWN
' И делай с ним что хочеш ))))))
Case Else
WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End Select
End Function






В приложеном файле тот-же текст но более читабельный

6.0K
19 апреля 2004 года
Wowan
7 / / 12.04.2004
Спасибо большое за помощь! Помогло! Читая форум, ко мне пришла идея.... Я сделал не много по другому, в качестве обмена опытом посылаю код, по этой же теме, вдруг когда пригодится...

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Declare Function GetScrollPos Lib "user32" _
(ByVal hwnd As Long, ByVal nBar As Long) As Long
Public Const LB_GETITEMHEIGHT = &H1A1
Public Const SB_VERT = 1


Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim h As Long
Dim s As Long
Dim ind As Integer
On Error Resume Next
If Button = 2 Then
s = GetScrollPos(List1.hwnd, SB_VERT)
h=SendMessage(List1.hwnd,LB_GETITEMHEIGHT,0, 0)
ind = Y \ (h * 15) + s
List1.Selected(ind) = True
End If
End Sub

Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu mnuqw, 8
End If
End Sub


С уважением.. Владимир.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог