-
Delphi7, KOL 2.83Понадобилось испозовать ComboBox c OwnerDrawVariable. Обработчики onMeasureItem и onDrawItem назначил и код прописал. Все работает без проблем. Но высота выпадающего списка слишком маленькая. Если объявить USE_DROPDOWNCOUNT высота становится стандартной, но мне этого все равно мало. Вопрос: Как изменить высоту выпадающего списка в ComboBox'e? Пробовал
MoveWindow(cb.Handle, cb.Left, cb.Top, cb.width, 700, true);
cb.Height := 700; Код добавлял в Combo.onDropDown и Button.onClick. Ничего не помогает.
-
USE_DROPDOWNCOUNT
-
> USE_DROPDOWNCOUNT
Сютуация такая.
a) Стандартный ComboBox b) coOwnerDrawVariable ComboBox (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.
ВОПРОС: Как изменить высоту выпадающего списка в coOwnerDrawVariable ComboBox
-
fDropDownProc присвойте свою процедуру. Больше рассуждаете, что возможно, что невозможно.
-
> Больше рассуждаете, что возможно, что невозможно.
Мудрый совет. Поспал, отдохнул, подумал, сделал отдельный проект для изучения данного вопроса и все мне стало ясно. Признаю, был не прав.Выводы:1) Изменить высоту, выпадающего списка, можно, но... 2) Задается максимальная высота, то есть нельзя установить высоту больше чем ItemHeight * Count 3) Kol.ComboboxDropDown работает неверно с coOwnerDrawVariable списками, но использование coOwnerDrawVariable случай не типичный, поэтому простительно. 4) ComboBox c coOwnerDrawVariable работает очень странно :( и KOL скорее всего не виноват. Вот набросал примерчик, буду благодарен если кто-нибудь понимающий глянет. http://slil.ru/25013106
-
А на VCL вы пробовали? (Я-то вообще не сталкивался, я вообще ни разу не видел комбобокса с переменным размером элементов, не только в исходниках, но даже в других программах).
-
> А на VCL вы пробовали?
Попробовал. :( На VCL вообще жуть. 1. Назначил обработчик onDrawItem, в нем, просто, заливаю прямоугольник цветом. Все ОК, но при выборе элемента, VCL услужливо рисует рамку выделения. :(
2. Высоту списка в onDropDown изменить не получается.
3. Обработкой события формы WM_COMMAND+CBN_DROPDOWN тоже.
|