Страница: 1 |
Страница: 1 |
Вопрос: Listbox
Добавлено: 23.01.08 08:44
Автор вопроса: Lenon
как обратиться к элементу стоящему в 5 колонке, 2 строке в Listboxе, еще вопрос а если мне необходимо обратиться к элементу стоящему в n-ной колонке, m-ной строке?
вопрос еще один
проблема следующая:
при щелчке мыши на одну из строк листбокса появлялась кнопка рядом с курсором, как это сделать?
помогите если не трудно
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 23.01.08 13:01
Вот такой вот код я щас написал. Если кто-то знает как проще - скажите, пожалуйста.
На форме должен быть листбокс с именем List1.
Const CCHILDREN_SCROLLBAR = 5
Const OBJID_HSCROLL As Long = &HFFFFFFFA
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type SCROLLBARINFO
cbSize As Long
rcScrollBar As RECT
dxyLineButton As Long
xyThumbTop As Long
xyThumbBottom As Long
reserved As Long
rgstate(CCHILDREN_SCROLLBAR) As Long
End Type
Private Declare Function GetScrollBarInfo Lib "user32" (ByVal hwnd As Long, ByVal idObject As Long, psbi As SCROLLBARINFO) As Long
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
Dim ItemsInColumn As Integer
Dim SInfo As SCROLLBARINFO
Private Sub Form_Load()
Me.ScaleMode = 3
' заполняем листбокс
For i = 1 To 50
List1.AddItem Str(i)
Next
' выводим в заголовок окна значение из второй строки второго столбца List1
Me.Caption = GetItem(List1, 2, 2)
End Sub
Function GetItem(cList As ListBox, ByVal Ln As Integer, ByVal Col As Integer) As String
Dim ret As Long
Dim ScrollBarHeight As Long
' определяем высоту полосы прокрутки
SInfo.cbSize = Len(SInfo)
ret = GetScrollBarInfo(cList.hwnd, OBJID_HSCROLL, SInfo)
ScrollBarHeight = SInfo.rcScrollBar.Bottom - SInfo.rcScrollBar.Top
If (ScrollBarHeight > Screen.Height * Screen.Height / Screen.TwipsPerPixelY) Or (ScrollBarHeight < 0) Then ScrollBarHeight = 0
' определяем высоту элемента списка
ret = SendMessage(cList.hwnd, LB_GETITEMHEIGHT, 0&, ByVal 0&
' находим количество элементов в столбце
ItemsInColumn = (cList.Height - ScrollBarHeight) / ret
If ScrollBarHeight Then ItemsInColumn = ItemsInColumn - 1
' собственно, извлекаем значение элемента
GetItem = cList.List((Col - 1) * ItemsInColumn + Ln - 1)
End Function
Номер ответа: 2
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #2
Добавлено: 23.01.08 13:10
Естественно, свойство Columns дольжно быть больше 1. Но и так буит работать
P.S.
Используй ListView или DataGrid в таких случаях.
Номер ответа: 3
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #3
Добавлено: 23.01.08 13:44
Кстати, прошу кого-нить проверить код на работоспособность. На моей винде вроде работает как задумывал...
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 23.01.08 20:21
Работает хорошо как надо
(забыл объявить i)
Номер ответа: 5
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #5
Добавлено: 23.01.08 20:38
У тебя больно ник подходящий, дабы проверять! D)
Номер ответа: 6
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #6
Добавлено: 23.01.08 21:32
Ну... какой есть)
Номер ответа: 7
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #7
Добавлено: 24.01.08 00:34
По поводу последнего вопроса вот тебе примерчик.
http://www.freefilehosting.net/download/3b07c