Страница: 1 | 2 | 3 | 4 |
Вопрос: HScroll в ListBox
Добавлено: 09.03.05 23:05
Автор вопроса: ZagZag | ICQ: 295002202
Есть процедура установки горизонтальной полосы прокрутки у стандартного
ЛистБокса:
Dim lngCurrent As Integer
Dim lngMax As Integer
Dim lngIndex As Long
Dim lngCount As Long
Dim lngMaxIndex As Long
Dim strListMaxText As String
lngCount = SendMessage(hListBox, LB_GETCOUNT, 0, 0)
If lngCount = 0 Then
ShowScrollBar hListBox, SB_HORZ, False
Else
ShowScrollBar hListBox, SB_HORZ, True
For lngIndex = 1 To lngCount
lngCurrent = SendMessage(hListBox, LB_GETTEXTLEN, 0, lngIndex)
If lngCurrent > lngMax Then
lngMax = lngCurrent
lngMaxIndex = lngIndex
End If
Next
strListMaxText = String$(SendMessage(hListBox, LB_GETTEXTLEN, 0,
lngMaxIndex), vbNullChar)
SendMessage hListBox, LB_GETTEXT, lngMaxIndex, ByVal strListMaxText
lngMax = frmMain.TextWidth(strListMaxText)
SendMessage hListBox, LB_SETHORIZONTALEXTENT, lngMax \
Screen.TwipsPerPixelX, 0
End If
End Sub
Скрол-то он ставит, но в ряде случаев текст выходит за пределы прокрутки, т.
е. даже прокруткой не получается добраться до конца строки.
Что же в этом коде подправить чтобы решить эту проблему?
Вариант с добавлением константы к lngMax не подходит. Желательно этого
достичь без такого варварского способа.
Заранее спасибо давшим дельный ответ :)
Ответы
Всего ответов: 54
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 10.03.05 00:22
Чем тебе не нравится вариант с константой?
Номер ответа: 2
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #2
Добавлено: 10.03.05 03:19
Другой способ не скажу - влом искать (если он конечно вообще существует), а вот максимальную ширину можно вычислить с помощью GetTextExtentPoint32.
Номер ответа: 3
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #3
Добавлено: 10.03.05 18:17
Sharp, константа не подходит, т. к. текст может иметь разную длину. Если
есть вариант - выстави его здесь, только я хочу чтобы скролл появлялся в
точь под длину максимальной строки.
CyRax, не хочется подключать gdi32.dll - в моем проекте я уМУДряюсь пока
обходиться без нее
В ЛистБоксе хранятся имена файлов (полные). Адреса можно динамически
добавлять/удалять. Я хочу чтобы можн было просмотреть имя файла от начала до
конца, а если имя слишком длинное - появился HScroll (принадлежащий ЛБ)
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 10.03.05 19:17
CyRax, не хочется подключать gdi32.dll
Не хочется - не подключай. Поищи тогда что то типа TextWidth(List1.List(Index))
Номер ответа: 5
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #5
Добавлено: 12.03.05 00:47
Вместо GetTextExtentPoint32 я обычно использую скрытый контрол Label с AutoSize = True )
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 12.03.05 05:36
А что тебя пугает gdi32.dll? Её ведь не надо таскать с собой, в любой винде она есть.
А TextWidth или Label.Autosize в любом случае полезут в эту самую gdi32.dll либо в user32.dll.
Оба этих метода либо GetTextExtentPoint32 либо DrawText вызывают.
Если с Label'ом, то надо его шрифт установить такой же, как в листбоксе
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 12.03.05 11:38
А TextWidth или Label.Autosize в любом случае полезут в эту самую gdi32.dll либо в user32.dll.
Во во, надо почаще открывать глаза VB-шникам, а то у них виртуальная машина - нечто вроде внеземной технологий и земному разуму её не понять
Номер ответа: 8
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #8
Добавлено: 13.03.05 00:11
CyRax, я не обоими ногами VB'шник
Я уже пытаюсь "напряженные" процедуры на асме или Power Basic писать. (Хотя
ПБ столько ненужных функций в ЕХЕ подключает )
Подкиньте примерчик, если у кого есть. Неужели Offline-клиент не использует
подобной конструкции?
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 13.03.05 13:32
Клиент не нуждается в подобной конструкции-лишь по одной причине - он ListBox не использует ему ListView больше по душе
Номер ответа: 10
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #10
Добавлено: 14.03.05 00:43
Номер ответа: 11
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #11
Добавлено: 14.03.05 14:49
А вот интересно - что быстрее работает с 100-10000 строками имен файлов? LB
или LV?
Если последний, то почему бы мне его не использовать? Всеравно Common
Controls подключаю...
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 14.03.05 17:30
ZagZag
LV и LB - всего лишь средство отображения состояния куска ОЗУ. Если нужно быстро показать данные, то тогда можно сравнивать LV и LB. Думаю, листбокс побыстрее заполнится. С другой стороны, есть virtual listview, который заполнять вообще не нужно. Он сам запросит количество данных, необходимое только для видимых на экране итемов. Остальные он не будет запрашивать и заполнять. Соответственно, времени нужно только на то, чтобы заполнить видимую часть.
А если нужно быстро обрабатывать данные, то это достигается алгоритмом, а не LV и LB.
Номер ответа: 13
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #13
Добавлено: 14.03.05 17:54
virtual listview
Что за монстрозный контрол? Фирменный или доморощенный?
Номер ответа: 14
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #14
Добавлено: 14.03.05 17:57
Хотя ПБ столько ненужных функций в ЕХЕ подключает
Фигня это всё. Сколько VB6 DLL-ок подключает? Одну. А загружается прога (первый раз) довольно долго. А PB'шная прога загружается моментально, потому что все адреса расчитываются компилятором, а не загрузчиком, как в VB.
Номер ответа: 15
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #15
Добавлено: 14.03.05 19:28
CyRax, я про то если бы он их не подключал...
36 Функций из 4-х (хоть и стандартных) библиотек для пустого проекта - ИМХО,
много
#TOOLS OFF
FUNCTION PBMain
END FUNCTION
Размер 5,5Кб
...и IDA ругается
section' at the loading time)
А во всем остальном:
PB = VB + ASM - MSVBVMxx.DLL + _
быстродействие - плохая_работа_с_оконным_интерфейсом +
приятные_мелочи (TCP OPEN, ARRAY SORT и т. д.)
Кстати, как можно использовать регулярные выражения из VB в PB. ИМХО,
встроенные в PB REGEXPR - тормознуты
Думаю лучше Microsoft VBScript Regular Expressions 5.5, но как ее
подключить и использовать из PB...