Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Высоту списка в ComboBox?


Вячеслав ©   (2007-10-19 23:27:00) 

Delphi7, KOL 2.83

Понадобилось испозовать ComboBox c OwnerDrawVariable.
Обработчики onMeasureItem и onDrawItem назначил и код прописал. Все работает без проблем. Но высота выпадающего списка слишком маленькая. Если объявить USE_DROPDOWNCOUNT высота становится стандартной, но мне этого все равно мало.

Вопрос: Как изменить высоту выпадающего списка в ComboBox'e?

Пробовал

{
 SetWindowPos( cb.Handle, 0, 0, 0, cb.Width, 700,
               SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOREDRAW +
               SWP_HIDEWINDOW);

 SetWindowPos( cb.Handle, 0, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
               + SWP_NOZORDER + SWP_NOACTIVATE
               + SWP_NOREDRAW + SWP_SHOWWINDOW);
}


MoveWindow(cb.Handle, cb.Left, cb.Top, cb.width, 700, true);


cb.Height := 700;

Код добавлял в Combo.onDropDown и Button.onClick.

Ничего не помогает.


Вячеслав   (2007-10-24 22:52:00) [1]


> А на VCL вы пробовали?


Попробовал. :( На VCL вообще жуть.
1. Назначил обработчик onDrawItem, в нем, просто, заливаю прямоугольник цветом. Все ОК, но при выборе элемента, VCL услужливо рисует рамку выделения. :(

2. Высоту списка в onDropDown изменить не получается.

3. Обработкой события формы WM_COMMAND+CBN_DROPDOWN тоже.


Vladimir Kladov   (2007-10-24 15:45:00) [2]

А на VCL вы пробовали? (Я-то вообще не сталкивался, я вообще ни разу не видел комбобокса с переменным размером элементов, не только в исходниках, но даже в других программах).


Вячеслав   (2007-10-23 20:23:00) [3]


> Больше рассуждаете, что возможно, что невозможно.


Мудрый совет.

Поспал, отдохнул, подумал, сделал отдельный проект для изучения данного вопроса и все мне стало ясно.

Признаю, был не прав.

Выводы:
1) Изменить высоту, выпадающего списка, можно, но...
2) Задается максимальная высота, то есть нельзя установить высоту больше чем ItemHeight * Count
3) Kol.ComboboxDropDown работает неверно с coOwnerDrawVariable списками, но использование coOwnerDrawVariable случай не типичный, поэтому простительно.
4) ComboBox c coOwnerDrawVariable работает очень странно :( и KOL скорее всего не виноват.

Вот набросал примерчик, буду благодарен если кто-нибудь понимающий глянет. http://slil.ru/25013106


Vladimir Kladov   (2007-10-21 07:06:00) [4]

fDropDownProc присвойте свою процедуру. Больше рассуждаете, что возможно, что невозможно.


Вячеслав   (2007-10-20 19:57:00) [5]


> USE_DROPDOWNCOUNT

Сютуация такая.

  a) СтандартныйComboBox
  b) coOwnerDrawVariableComboBox (3 строки: 50px, 20px, 20px)

1)Если НЕ ИСПОЛЬЗОВАТЬUSE_DROPDOWNCOUNT
  a)Высота списка стандартная.
  b)Высота списка 50px.

 Изменить высоту списка в любом случае не получается.

2)Если ИСПОЛЬЗОВАТЬUSE_DROPDOWNCOUNT
  a)Высота списка  равна количество строк* высоту первой строки
  b)Высота списка равно (3*50) = 150px, а должна быть (50+20+20)=90px.

 Изменить высоту списка в любом случае не получается, что не удивительно, так как она задается свойством DropDownCount.

3)Если НЕ ИСПОЛЬЗОВАТЬUSE_DROPDOWNCOUNT и в процедуре KOL.ComboboxDropDownзакоментировать вызовы SetWindowPos/
  a)Высота списка стандартная, высоту изменить можно.
  b)Высота списка стандартная, высоту изменить нельзя.

4)Если ИСПОЛЬЗОВАТЬUSE_DROPDOWNCOUNT и в процедуре KOL.ComboboxDropDownзакоментировать вызовы SetWindowPos/
  a)Высота списка стандартная, высоту изменить можно.
  b)Высота списка стандартная, высоту изменить нельзя.

И вообще работу функции KOL.ComboboxDropDown для coOwnerDrawVariable считаю некорректной. Ведь высота строк в списке разная, а высота списка задается равной высоте первой строки умноженной на DropDownCount.

ВОПРОС:Как изменить высоту выпадающего списка в coOwnerDrawVariableComboBox


Vladimir Kladov   (2007-10-20 09:03:00) [6]

USE_DROPDOWNCOUNT


Наверх

Титульная страница Поиск, карта сайта Написать письмо