Конференция "KOL" » Высоту списка в ComboBox?
 
  • Вячеслав (19.10.07 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 © (20.10.07 09:03) [1]
    USE_DROPDOWNCOUNT
  • Вячеслав (20.10.07 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 © (21.10.07 07:06) [3]
    fDropDownProc присвойте свою процедуру. Больше рассуждаете, что возможно, что невозможно.
  • Вячеслав (23.10.07 20:23) [4]

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


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

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

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

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

    Вот набросал примерчик, буду благодарен если кто-нибудь понимающий глянет. http://slil.ru/25013106
  • Vladimir Kladov © (24.10.07 15:45) [5]
    А на VCL вы пробовали? (Я-то вообще не сталкивался, я вообще ни разу не видел комбобокса с переменным размером элементов, не только в исходниках, но даже в других программах).
  • Вячеслав (24.10.07 22:52) [6]

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


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

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

    3. Обработкой события формы WM_COMMAND+CBN_DROPDOWN тоже.
 
Конференция "KOL" » Высоту списка в ComboBox?
Есть новые Нет новых   [134431   +10][b:0][p:0.001]