ImageCombo с мультивыбором

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

ImageCombo с мультивыбором

Сообщение Space » 09.01.2009 (Пт) 20:04

Хочу сделать ImageCombo с мультивыбором, но есть ряд проблем:
1. Ниспадающий список закрывается при клике на Item
2. Нет возможности сделать Select нескольким Item. Хочу "MultiSelect" заменить на подцветку Item - тоже нет возможности.

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: ImageCombo с мультивыбором

Сообщение Йода » 09.01.2009 (Пт) 21:23

Пара вопросов:
1. Каким образом выпадающий список узнает что ему пора спрятаться, если на каждый клик мыша он будет выделять очередной Item?
2. Как ты представляешь себе отображение результатов "MultiSelect" в текстовой части ImageCombo? Через запятую? :lol:

ПодЦветка - это изменение цвета текста выбранного элемента списка? Если да - то бери обычный ListBox, ставь стиль LBS_OWNERDRAWFIXED (LBS_OWNERDRAWVARIABLE - по обстоятельствам) и отрисовывай его руками. Ну а прикрутив кнопку с текстовым полем, получишь желаемый контрол.
Sub or Function not defined

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: ImageCombo с мультивыбором

Сообщение Space » 09.01.2009 (Пт) 22:05

1. При потере фокуса или клике внутри основного поля.
2. Изменением цвета текста или фона Item
3. В ListBox можно использовать флажки. Но мне нужен выпадающий список + картинки, а писать юзер-контрол у меня здоровья не хватит, тем более я никогда их не делал.
4. Ха-ха. Можно сделать по левому клику выпадающее меню, однако, у меня контролов таких много и делать каждому меню... Хотя, может, массив форм меню... Короче, пока жду гениальных решений для ImageCombo.

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: ImageCombo с мультивыбором

Сообщение Йода » 10.01.2009 (Сб) 2:40

Заглянув в MSDN, я обнаружил следующее:
1. ImageCombo он же ComboBoxEx - расширенная версия обычного комбобокса с установленым стилем CBS_OWNERDRAWFIXED. (что собственно и предполагалось)
2. У ComboBoxEx не обнаружилось никаких стилей, включающих множественное выделение элементов списка, из чего можно сделать вывод, что подобной фичи в этом контроле нет.
3. Ссылка в MSDN с описанием контрола: http://msdn.microsoft.com/en-us/library/cc656432(VS.85).aspx (А вдруг я чего пропустил?)

Я всё же предлагаю тебе заюзать комбинацию Button+Edit+ListBox. Пункты №2 и №3 решаются с помощью сабклассинга - я написал небольшой пример (прилагается) рисования элементов ListBox - а вручную.

З.Ы. Я тоже никогда не писал юзер-контролы :lol:

З.З.Ы. Выспавшись и заново перечитав написанное мной, понял, что допустил небольшую неточность в первом посте этой темы, а именно: для VB-шного ListBox-а нет необходимости вручную ставить LBS_OWNERDRAWFIXED (ListBox на него не реагирует), а нужно в свойствах ListBox-а поставить Style = 1 - Checkbox.
Вложения
ListBoxOwnerdrawFixed.rar
Разноцветный ListBox
(2.08 Кб) Скачиваний: 88
Sub or Function not defined

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: ImageCombo с мультивыбором

Сообщение Space » 10.01.2009 (Сб) 13:11

а где же флажки у ListBox потерялись?

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: ImageCombo с мультивыбором

Сообщение Йода » 10.01.2009 (Сб) 21:30

Флажки не потерялись :D . Они рисуются старой оконной процедурой, которая имеет свой обработчик WM_DRAWITEM и рисует флажки. В моём примере оконная процедура по умолчанию заменяется на самописную (это и есть сабклассинг) - WndProc_frmTest. В ней обрабатывается сообщение WM_DRAWITEM: в lParam содержится указатель на заполненную структуру DRAWITEMSTRUCT которая содержит необходимую информацию (контекст устройства, состояние выделен/не выделен, размеры) о элементе ListBox-a, который необходимо перерисовать, что собственно и делается. Все другие сообщения отправляются к старой оконной процедуре.
Sub or Function not defined

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: ImageCombo с мультивыбором

Сообщение Space » 10.01.2009 (Сб) 21:47

так если старая оконная процедура выполняется, то почему она не рисует флажки?

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

Re: ImageCombo с мультивыбором

Сообщение iGrok » 10.01.2009 (Сб) 21:54

Space писал(а):так если старая оконная процедура выполняется, то почему она не рисует флажки?

Потому, что отрисовкой занимается новая оконная процедура. И сообщения о необходимости отрисовки не доходят до старой оконной процедуры.

Прочитай про сабклассинг, а?
label:
cli
jmp label

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: ImageCombo с мультивыбором

Сообщение Йода » 10.01.2009 (Сб) 21:56

Потому, что старая оконная процедура не обрабатывает WM_DRAWITEM: вместо неё это делает наша самописная оконная процедура.
З.Ы. Уже ответили... Извиняюсь. :oops:

З.З.Ы. Space, а мне вот стало интересно: зачем тебе нужен ImageCombo с мультивыбором? (предположение - ты пишешь кастомный диалог выбора файлов, да?)
Sub or Function not defined

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: ImageCombo с мультивыбором

Сообщение Space » 10.01.2009 (Сб) 23:30

нет, не пишу кастомный диалог выбора файлов

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Re: ImageCombo с мультивыбором

Сообщение Zenitchik » 11.01.2009 (Вс) 21:37

А я рисовал иконки в виде флажков, а в текстовой части Combo они действительно отображались через запятую ))) Как я обходил сворачивание-разворачивание - уже не помню.
Знание английского языка - затрудняет понимание кода


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 67

    TopList