Возможно ли увеличить высоту выпадающего окна ImageCombo?

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

Возможно ли увеличить высоту выпадающего окна ImageCombo?

Сообщение brigval » 31.05.2007 (Чт) 11:46

Возможно ли увеличить высоту выпадающего окна ImageCombo более чем на девять записей?
brigval

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

Сообщение alibek » 31.05.2007 (Чт) 12:13

Да, а зачем?
Какое-то сообщение с SETHEIGHT, помоему.

Хотя нет, это относится к обычному ComboBox.
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 31.05.2007 (Чт) 12:24

CB_SETITEMHEIGHT вроде как
Весь мир матрица, а мы в нем потоки байтов!

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 31.05.2007 (Чт) 12:43

alibek писал(а):Да, а зачем?
Какое-то сообщение с SETHEIGHT, помоему.

Для каждого случая выпадает окошко с разнами иконками. Красиво.
Для ComboBox нашел в Интернете увеличивется и ширина и высота. А у ImagrCombo только ширина , а высота не хочет :(
brigval

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 31.05.2007 (Чт) 12:50

!Viper! писал(а):CB_SETITEMHEIGHT вроде как

Не работает.

Вот этот код отлично работает для ComboBox и не хочет для ImageCombo
Код: Выделить всё
Public Sub ReSizeCombo(frm As Form, cbo As ComboBox)  ' Процедура меняет размер  выпадающей  части  комбобокса
   Dim cboLeft As Long
   Dim cboTop As Long
   Dim cboWidth As Long
   Dim cboHeight As Long
   Dim oldScaleMode As Long
   ' Меняем Scale Mode формы на пиксели.
   oldScaleMode = frm.ScaleMode
   frm.ScaleMode = vbPixels
   ' Сохраняем размеры  комбобокса
   cboLeft = cbo.Left
   cboTop = cbo.Top
   cboWidth = cbo.Width
   ' Задаем новую высоту  комбобокса , в соотвествии с рабочей областью формы
   cboHeight = frm.ScaleHeight - cbo.Top '- 5
   frm.ScaleMode = oldScaleMode
   'и собственно ресайзаем
   MoveWindow cbo.hwnd, cboLeft, cboTop, cboWidth, cboHeight, 1
End Sub


Вот этот код изменяет ширину и ImageCombo и ComboBox
Код: Выделить всё
SendMessageLong imcNaim.hwnd, CB_SETDROPPEDWIDTH, Xpix, 0


Увеличить высоту окна ImageCombo не получается...
brigval

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2007 (Чт) 13:05

Долго думал, влепить предупреждение за не очень качественный вопрос в разделе для профессионалов или нет. Решил просто перенести. Но не надо так делать в следующий раз.

Этот код работает, если список уже отображён или существует по крайней мере. Установка размеров дочернему ComboBox не срабатывает потому, что ImageCombo помнит размеры сам и применяет их поверх.

Однако выпадающий список является всё тем же ComboLBox и к нему применимы все те же правила.

Код: Выделить всё
    Dim r As RECT, i As COMBOBOXINFO
   
    i.cbSize = Len(i)
    SendMessage FindWindowEx(ImageCombo1.hwnd, 0, "ComboBox", vbNullString), CB_GETCOMBOBOXINFO, 0, i
   
    GetWindowRect i.hwndList, r
    MoveWindow i.hwndList, r.Left, r.Top, r.Right - r.Left, 400, 1


Всё это можно было легко установить самому с помощью Spy++ и немного кода. Что ещё раз показывает, что появление вопроса в разделе для профессионалов было не совсем соответствующим.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 31.05.2007 (Чт) 13:54

GSerg писал(а):Решил просто перенести.


Спасибо, GSerg!
:?

Но я так пока не понял как воспользоваться советом.
Сделал процедуру
Код: Выделить всё
Public Sub ReSizeImCombo(ImageCombo1 As ImageCombo)
    Dim r As RECT, i As COMBOBOXINFO
   
    i.cbSize = Len(i)
    SendMessage FindWindowEx(ImageCombo1.hwnd, 0, "ComboBox", vbNullString), CB_GETCOMBOBOXINFO, 0, i
   
    GetWindowRect i.hwndList, r
    MoveWindow i.hwndList, r.Left, r.Top, r.Right - r.Left, 1200, 1
End Sub


Помещал ее и в загрузку формы и в imcNaim_Dropdown. Результат нулевой. Что надо сделать, чтоб выпадающее окно увеличилось?
brigval

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2007 (Чт) 13:59

GSerg писал(а):Этот код работает, если список уже отображён

А событие дропдауна срабатывает до отображения списка, и потом ImageCombo его перемещает.

Поэтому надо сабклассить ImageCombo на предмет CBN_DROPDOWN или аналогично.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 31.05.2007 (Чт) 14:06

А если по событию _Dropdown запустить таймер, котоый через долю секунды запустит процедуру и отключится? Прокатит?
brigval

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2007 (Чт) 14:11

Прокатит.
Но это криво.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 31.05.2007 (Чт) 14:40

GSerg писал(а):Прокатит.
Но это криво.

По таймеру пока не получается. Все отрабатывается, но i.hwndList=0
brigval

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2007 (Чт) 14:50

У меня не ноль и работает. По таймеру.
Но это всё равно криво.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 31.05.2007 (Чт) 15:28

Все заработало, GSerg! Не правильно значение константы записал.
Огромное спасибо.
brigval


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

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

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

    TopList