FreeBasic
Главная
Вход
Регистрация
Пятница, 01.11.2024, 22:27Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
ListBoxGadget
VitaminДата: Пятница, 03.03.2017, 18:18 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
В следующем примере не срабатывает горизонтальный скролинг:


Код
#Include "window9.bi"
Var hwnd=OpenWindow("",10,10,200,200)
ListBoxGadget(1,10,10,120,60,WS_VSCROLL Or WS_HSCROLL)
AddListBoxItem(1,"1 String 0123456789")
AddListBoxItem(1,"2 String 0123456789")
AddListBoxItem(1,"3 String 0123456789")
AddListBoxItem(1,"0 String 0123456789",0)

Do
 Var event=WaitEvent
 Select Case event
  Case EventClose
   End
 End Select
Loop


что не так?
 
haavДата: Пятница, 03.03.2017, 19:20 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1370
Репутация: 49
Статус: Offline
Горизонтальная прокрутка в ListBox ставится ручками smile
Например для данного примера можно сделать так:

Код
#Include "window9.bi"
Var hwnd=OpenWindow("",10,10,200,200)
ListBoxGadget(1,10,10,120,60,WS_VSCROLL Or WS_HSCROLL)
AddListBoxItem(1,"1 String 0123456789")
AddListBoxItem(1,"2 String 0123456789")
AddListBoxItem(1,"3 String 0123456789")
AddListBoxItem(1,"0 String 0123456789",0)
SendMessage(GadgetID(1), LB_SETHORIZONTALEXTENT, 140, 0)
Do
Var event=WaitEvent
Select Case event
  Case EventClose
   End
End Select
Loop


Однако это будет хорошо выглядеть, если ширина текста в пунктах ListBox останется неизменной. В случае увеличения длины строки, прокрутка длиннее не станет, пока ее не изменишь с помощью сообщения LB_SETHORIZONTALEXTENT . Можно конечно сразу вместо 140 поставить какое-нибудь большое число, именно так и делал в одной своей программе...
Есть способ получать в цикле каждую длину всех строк и высчитывать ширину каждого символа каждой строки с помощью ( GetTextMetrics, GetTextExtentPoint32), но вот как это скажется на производительности в случае большого кол-ва строк?!


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
VitaminДата: Пятница, 03.03.2017, 21:38 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
Спасибо за ответ. Этот вариант лучше чем ничего, но жаль, что в данном случае автоматика не срабатывает.
 
  • Страница 1 из 1
  • 1
Поиск: