Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Вниз

Сделать компонент поверх всех. 


avr555   (2001-12-21 16:50) [0]

Как в RunTime перевести компонент поверх всех других?



MBo   (2001-12-21 17:01) [1]

BringToFront



Юрий Зотов   (2001-12-21 17:10) [2]

Добавление - графический контрол НИКОГДА не ляжет поверх оконных на том же Parent"е.



MBo   (2001-12-21 18:23) [3]

>Юрий Зотов
не подскажете, чем это обусловлено? Судя по исходникам,
TWinСontrol перекрывает SetZOrderPosition TControl, а TGraphicControl нет.
Позиция первого устанавливается в списке FWinControls родителя,
а второго в списке FControls, подмножеством которого, как я понимаю, является FWinControls.
Что же тогда не дает TGraphicControl встать перед оконным?



Юрий Зотов   (2001-12-21 20:50) [4]

Z-оrder здесь ни при чем.

Дело в том, что графические контролы - это расширение Delphi, а в Windows существуют только оконные контролы. Поэтому в терминах Windows графические контролы Delphi - это просто рисунки, о которых сама Windows, естественно, ничего не знает (действительно, мало ли что там нарисовала какая-то программа, откуда системе об этом знать?).

Когда Windows обновляет окно, то сначала она шлет сообщения о перерисовке родительскому окну, а потом его дочерним окнам (что и понятно, ведь в противном случае родительское окно затирало бы свои контролы). Получив сообщение, родительское окно перерисовывается и при этом перерисовываются его графические контролы (а когда же им еще перерисовываться? ведь это не окна, хэндлов они не имеют и сообщений не получают - а поэтому могут перерисовываться только вместе с родительским окном). Причем ВСЕ дочерние контролы (и оконные, и графические) ВСЕГДА рисуются на канве родительского окна (а где же еще им рисоваться?).

После родительского окна сообщения о перерисовке получают его оконные контролы и тоже начинают перерисовываться - естественно, НА ТОЙ ЖЕ САМОЙ КАНВЕ родительского окна, вот что важно! Понятно, что при этом они неизбежно будут затирать то, что ранее на этой же канве было нарисовано - то есть, те графические контролы, с которыми они перекрываются.

Вот и оказывается, что ОКОННЫЙ контрол ВСЕГДА будет поверх ГРАФИЧЕСКОГО. Если сравнить форму с крышкой стола, то графические контролы можно сравнить с рисунками на этой крышке, а оконные - с предметами, лежащими на этом столе. Ясно, что предмет всегда закроет рисунок.



MBo   (2001-12-22 07:18) [5]

Спасибо, в общих чертах понятно, с деталями надо самому разбираться.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.05 c
1-28493           vbazik                2001-12-21 13:16  2002.01.10  
Помогите с графикой, please :-(


6-28524           Алексей Штыков        2001-10-16 14:38  2002.01.10  
Как втихую проверить обновления (любые) с сервера.?


7-28550           Eduard1               2001-09-28 14:04  2002.01.10  
Hook - Help me


1-28449           Knyaz17               2001-12-21 11:47  2002.01.10  
Как наследовать метод не родителя, а родителя родителя?


7-28546           Riman                 2001-06-01 09:33  2002.01.10  
Сканер штрих кода