Форум: "Основная";
Текущий архив: 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]Спасибо, в общих чертах понятно, с деталями надо самому разбираться.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c