Рисование control за пределами parent`a

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Рисование control за пределами parent`a

Сообщение Naumoff » 08.12.2016 19:33:02

На форме программно отображаются/скрываются компоненты, панельки, деревья и пр. Если контрол не умещается на форме, он рисуется только до границы формы, ну или другого своего контейнера. Можно ли это обойти? К примеру выпадающий список Combobox`a как то рисуется поверх всех элементов.
Naumoff
новенький
 
Сообщения: 11
Зарегистрирован: 13.08.2016 19:32:20

Re: Рисование control за пределами parent`a

Сообщение olegy123 » 08.12.2016 22:26:27

Зачем? принцип контрола - в создании своего пространства, которое может не умещаться в видимой части.. выходящее просто не отображается.. при этом учитывается размеры родительского компонента и так далее до самого окна-формы(TForm) - за границы которого вообще ничего не должно рисоваться..

Combobox - же при выпадании списка создает еще одно отдельное экранное окно(так называемое системное форм-окно, без кнопок закрытия, сворачивания.. и названия..) с заданными размерами и размещает строго под компонентом tedit вычисляя абсолютные дисплейные координаты. и оно не является частью канвы базового компонента.
Такой способностью обладают hint-ы(появляющиеся подсказки).
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Рисование control за пределами parent`a

Сообщение Naumoff » 09.12.2016 08:43:11

olegy123 писал(а):Зачем?

Цель та же, что и у Combobox`а. Выпадающее меню, только в нем другие контролы. Я так понимаю у меня подход не верный, надо работать с другой формой в качестве контейнера. С этого начинал, но споткнулся на том, что форма-контейнер забирала себе фокус, получалось не красиво. Покопаюсь в исходниках Combobox`а.
Naumoff
новенький
 
Сообщения: 11
Зарегистрирован: 13.08.2016 19:32:20

Re: Рисование control за пределами parent`a

Сообщение zub » 09.12.2016 10:27:05

>>Покопаюсь в исходниках Combobox`а.
Ни к чему копание не преведет - Combobox это системный контрол.
Средствами LCL такое поведение не реализовать - только на более низком уровне
подобный топик http://forum.lazarus.freepascal.org/ind ... 988.0.html незнаю чем там дело кончилось
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Рисование control за пределами parent`a

Сообщение Naumoff » 09.12.2016 11:34:32

zub писал(а):Combobox это системный контрол

LCL и так имеет неплохие возможности влияния на Combobox`ы. Да мало ли, может винда предлагает подобный универсальный всплывающий контрол, на котором можно рисовать что угодно. Но это вряд ли.
Топик что надо, именно такой ComboboxForm мне нужен.
В fpGUI я так понял все всплывающие контролы (хинты, попаппы и пр.) реализованы на своем TfpgPopupWindow, где как то побороли "stealing focus".
Еще в дельфийских EhLib видел хитрый комбобокс для фильтров, тоже явно реализовано отдельной формой.
В общем похоже простого решения нет.
Naumoff
новенький
 
Сообщения: 11
Зарегистрирован: 13.08.2016 19:32:20

Re: Рисование control за пределами parent`a

Сообщение zub » 09.12.2016 12:02:36

>>LCL и так имеет неплохие возможности влияния на Combobox`ы
Однако окно выпадающего списка создается внутри винды, из LCL к нему никакого доступа нет
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Рисование control за пределами parent`a

Сообщение olegy123 » 09.12.2016 20:54:11

zub писал(а):>>Покопаюсь в исходниках Combobox`а.
Ни к чему копание не преведет - Combobox это системный контрол.
Средствами LCL такое поведение не реализовать - только на более низком уровне
подобный топик http://forum.lazarus.freepascal.org/ind ... 988.0.html незнаю чем там дело кончилось

не так. Combobox - не системный контрол..
VCL контролы глубоко переработаны под делфи(D7).. базируются на базовых элементах(winApi) их немного: вызов окна.. текст(шрифт), поле ввода с кареткой, картинки.. еще что то..
по моему там даже кнопок нет, их рисуют в компонентной базе..

Я в поле ввода вставлял несколько кнопок и форматировал ввод текста.. все фокусы были в делфи + winapi, где корректировал размеры границ для текста для границ компонента..

Чем знаменит был Delphi - только тем что очень много компонент наделали.. и программисты были дружны и активно делились опытом друг с другом..
когда VC++ все было продакшен, поэтому там мало разнообразий компонентов..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Рисование control за пределами parent`a

Сообщение alexs » 10.12.2016 13:38:53

Naumoff писал(а):Покопаюсь в исходниках Combobox`а.

Посмотри как реализован RxDBLockupComboBox - я та именно эмулировал поведение комбобокса. В всплывающем окно расположены дополнительные контролы (грид/кнопки)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Рисование control за пределами parent`a

Сообщение zub » 10.12.2016 14:10:52

olegy123 писал(а):Я в поле ввода вставлял несколько кнопок и форматировал ввод текста.. все фокусы были в делфи + winapi, где корректировал размеры границ для текста для границ компонента..

В поле ввода пожалуйста, а в дропдавн окно непросто пробраться - штатными lcl-vcl методами вообще никак, только winapi. ЕМНИП.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48

Рейтинг@Mail.ru