Рисование control за пределами parent`a
Модератор: Модераторы
Рисование control за пределами parent`a
На форме программно отображаются/скрываются компоненты, панельки, деревья и пр. Если контрол не умещается на форме, он рисуется только до границы формы, ну или другого своего контейнера. Можно ли это обойти? К примеру выпадающий список Combobox`a как то рисуется поверх всех элементов.
Зачем? принцип контрола - в создании своего пространства, которое может не умещаться в видимой части.. выходящее просто не отображается.. при этом учитывается размеры родительского компонента и так далее до самого окна-формы(TForm) - за границы которого вообще ничего не должно рисоваться..
Combobox - же при выпадании списка создает еще одно отдельное экранное окно(так называемое системное форм-окно, без кнопок закрытия, сворачивания.. и названия..) с заданными размерами и размещает строго под компонентом tedit вычисляя абсолютные дисплейные координаты. и оно не является частью канвы базового компонента.
Такой способностью обладают hint-ы(появляющиеся подсказки).
Combobox - же при выпадании списка создает еще одно отдельное экранное окно(так называемое системное форм-окно, без кнопок закрытия, сворачивания.. и названия..) с заданными размерами и размещает строго под компонентом tedit вычисляя абсолютные дисплейные координаты. и оно не является частью канвы базового компонента.
Такой способностью обладают hint-ы(появляющиеся подсказки).
olegy123 писал(а):Зачем?
Цель та же, что и у Combobox`а. Выпадающее меню, только в нем другие контролы. Я так понимаю у меня подход не верный, надо работать с другой формой в качестве контейнера. С этого начинал, но споткнулся на том, что форма-контейнер забирала себе фокус, получалось не красиво. Покопаюсь в исходниках Combobox`а.
>>Покопаюсь в исходниках Combobox`а.
Ни к чему копание не преведет - Combobox это системный контрол.
Средствами LCL такое поведение не реализовать - только на более низком уровне
подобный топик http://forum.lazarus.freepascal.org/ind ... 988.0.html незнаю чем там дело кончилось
Ни к чему копание не преведет - Combobox это системный контрол.
Средствами LCL такое поведение не реализовать - только на более низком уровне
подобный топик http://forum.lazarus.freepascal.org/ind ... 988.0.html незнаю чем там дело кончилось
zub писал(а):Combobox это системный контрол
LCL и так имеет неплохие возможности влияния на Combobox`ы. Да мало ли, может винда предлагает подобный универсальный всплывающий контрол, на котором можно рисовать что угодно. Но это вряд ли.
Топик что надо, именно такой ComboboxForm мне нужен.
В fpGUI я так понял все всплывающие контролы (хинты, попаппы и пр.) реализованы на своем TfpgPopupWindow, где как то побороли "stealing focus".
Еще в дельфийских EhLib видел хитрый комбобокс для фильтров, тоже явно реализовано отдельной формой.
В общем похоже простого решения нет.
>>LCL и так имеет неплохие возможности влияния на Combobox`ы
Однако окно выпадающего списка создается внутри винды, из LCL к нему никакого доступа нет
Однако окно выпадающего списка создается внутри винды, из LCL к нему никакого доступа нет
zub писал(а):>>Покопаюсь в исходниках Combobox`а.
Ни к чему копание не преведет - Combobox это системный контрол.
Средствами LCL такое поведение не реализовать - только на более низком уровне
подобный топик http://forum.lazarus.freepascal.org/ind ... 988.0.html незнаю чем там дело кончилось
не так. Combobox - не системный контрол..
VCL контролы глубоко переработаны под делфи(D7).. базируются на базовых элементах(winApi) их немного: вызов окна.. текст(шрифт), поле ввода с кареткой, картинки.. еще что то..
по моему там даже кнопок нет, их рисуют в компонентной базе..
Я в поле ввода вставлял несколько кнопок и форматировал ввод текста.. все фокусы были в делфи + winapi, где корректировал размеры границ для текста для границ компонента..
Чем знаменит был Delphi - только тем что очень много компонент наделали.. и программисты были дружны и активно делились опытом друг с другом..
когда VC++ все было продакшен, поэтому там мало разнообразий компонентов..
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Naumoff писал(а):Покопаюсь в исходниках Combobox`а.
Посмотри как реализован RxDBLockupComboBox - я та именно эмулировал поведение комбобокса. В всплывающем окно расположены дополнительные контролы (грид/кнопки)
olegy123 писал(а):Я в поле ввода вставлял несколько кнопок и форматировал ввод текста.. все фокусы были в делфи + winapi, где корректировал размеры границ для текста для границ компонента..
В поле ввода пожалуйста, а в дропдавн окно непросто пробраться - штатными lcl-vcl методами вообще никак, только winapi. ЕМНИП.
