Scroll у стандартного ListBox

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

Scroll у стандартного ListBox

Сообщение Alprog » 23.11.2008 (Вс) 10:50

Возникла проблема со стандартными ListBox'ами. Их у меня несколько на форме и хочется, чтобы при скроле одного скролились остальные.
Проблема возникает, когда пользователь начинает скролить колёсиком мыши.

Соответственно, появляются вопросы:

1. Можно ли запретить скролл колёсиком?
2. Можно ли отловить скролл колёсиком?
3. Можно ли считать (установить) текущее положения скролла?
4. Есть ли какой-нибудь стандартный компонент, вроде ListBox, но не скролящийся колесом?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Scroll у стандартного ListBox

Сообщение Хакер » 23.11.2008 (Вс) 14:08

1. В идеале, тем кто делает свои контроллы и забывает об обработке скролла, надо отрывать руки. А тут автор наоборот хочет лишить контролл, у которого есть обратка колесика, этого замечательного качества.
Можно, но категорически не нужно.

2. Да, сабклассинг на предмет WM_MOUSEWHEEL.
3. Да, GetScrollInfo, SetScrollInfo, GetScrollPos и структура SCROLLINFO поможет тебе.
4. Нет.

Но есть мнение, что раз тебе надо скроллить два столбика одновременно, то возможно тебе нужен ListView, нежели кривой вариант с несколькими ListBox-ами и их синхронном скролле.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Scroll у стандартного ListBox

Сообщение iGrok » 23.11.2008 (Вс) 14:24

Хакер писал(а):2. Да, сабклассинг на предмет WM_MOUSEWHEEL.

Я вот тоже сходу подумал о сабклассинге, и даже собирался об этом написать, но в упор не вижу у ListBox'а HWND..

UPD:
Всё, нашёл. )
На всякий случай:
Код: Выделить всё
Private Declare Function GetFocus Lib "user32" () As Long
...
ListBox.SetFocus()
ListBoxHWND = GetFocus()
...


UPD: После ответа Хакера. Всё у него есть. Это я ступил. )
Последний раз редактировалось iGrok 23.11.2008 (Вс) 16:42, всего редактировалось 1 раз.
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Scroll у стандартного ListBox

Сообщение Хакер » 23.11.2008 (Вс) 14:50

Что за ерунда?

Есть у него свойство hWnd.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Re: Scroll у стандартного ListBox

Сообщение Alprog » 23.11.2008 (Вс) 15:17

2. Да, сабклассинг на предмет WM_MOUSEWHEEL.
3. Да, GetScrollInfo, SetScrollInfo, GetScrollPos и структура SCROLLINFO поможет тебе.

Спасибо, будем гуглить.

Но есть мнение, (...) тебе нужен ListView

ListView1 - это компонент, имитирующий что-то вроде рабочего стола. Я чего-то не понимаю?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Scroll у стандартного ListBox

Сообщение Хакер » 23.11.2008 (Вс) 15:21

Открой диспетчер задач и посмотри на список процессов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Scroll у стандартного ListBox

Сообщение iGrok » 23.11.2008 (Вс) 16:41

Хакер писал(а):Что за ерунда?

Есть у него свойство hWnd.

Хм. Действительно. Нифига не понимаю. Утром три раза открывал студию, и три раза не нашёл у него hWnd..
Совсем слепой стал, похоже..
label:
cli
jmp label

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Scroll у стандартного ListBox

Сообщение pronto » 23.11.2008 (Вс) 18:11

Явная "перегрузка" понятий. ListBox - это общее название используемого контрола. List1, List2 и т.д. - имена этих контролов, присваемые по умолчанию. Чтобы получить доспут к свойству контрола нужно обратится по его имени, то есть List1.hWnd. ListView - это тоже контрол, но чуть более продвинутый по сравнению с ListBox'ом.
O, sancta simplicitas!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Scroll у стандартного ListBox

Сообщение alibek » 24.11.2008 (Пн) 9:23

Alprog писал(а):Их у меня несколько на форме и хочется, чтобы при скроле одного скролились остальные.

TopIndex тебе поможет.
Lasciate ogni speranza, voi ch'entrate.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Re: Scroll у стандартного ListBox

Сообщение Alprog » 24.11.2008 (Пн) 10:07

TopIndex тебе поможет.

Пасиба.

Я понамутил с GetScrollPos и SendMassageA, а тут всё так просто оказывается.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 95

    TopList