![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Высоту списка в 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