Форум: "KOL";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
ВнизВысоту списка в ComboBox? Найти похожие ветки
← →
Вячеслав (2007-10-19 23:27) [0]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.
Ничего не помогает.
← →
Vladimir Kladov © (2007-10-20 09:03) [1]USE_DROPDOWNCOUNT
← →
Вячеслав (2007-10-20 19:57) [2]
> 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
← →
Vladimir Kladov © (2007-10-21 07:06) [3]fDropDownProc присвойте свою процедуру. Больше рассуждаете, что возможно, что невозможно.
← →
Вячеслав (2007-10-23 20:23) [4]
> Больше рассуждаете, что возможно, что невозможно.
Мудрый совет.
Поспал, отдохнул, подумал, сделал отдельный проект для изучения данного вопроса и все мне стало ясно.
Признаю, был не прав.
Выводы:
1) Изменить высоту, выпадающего списка, можно, но...
2) Задается максимальная высота, то есть нельзя установить высоту больше чем ItemHeight * Count
3) Kol.ComboboxDropDown работает неверно с coOwnerDrawVariable списками, но использование coOwnerDrawVariable случай не типичный, поэтому простительно.
4) ComboBox c coOwnerDrawVariable работает очень странно :( и KOL скорее всего не виноват.
Вот набросал примерчик, буду благодарен если кто-нибудь понимающий глянет. http://slil.ru/25013106
← →
Vladimir Kladov © (2007-10-24 15:45) [5]А на VCL вы пробовали? (Я-то вообще не сталкивался, я вообще ни разу не видел комбобокса с переменным размером элементов, не только в исходниках, но даже в других программах).
← →
Вячеслав (2007-10-24 22:52) [6]
> А на VCL вы пробовали?
Попробовал. :( На VCL вообще жуть.
1. Назначил обработчик onDrawItem, в нем, просто, заливаю прямоугольник цветом. Все ОК, но при выборе элемента, VCL услужливо рисует рамку выделения. :(
2. Высоту списка в onDropDown изменить не получается.
3. Обработкой события формы WM_COMMAND+CBN_DROPDOWN тоже.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.053 c