Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-28450
grab
2001-12-21 18:21
2002.01.10
Текст из TEdit на одной форме в ячейки таблицы на другой форме


3-28445
szap
2001-12-07 15:09
2002.01.10
Альтернатива TQuery


3-28439
Denis Proshkin
2001-12-08 10:32
2002.01.10
Удаление повторяющихся данных


3-28432
WildWind
2001-12-07 10:48
2002.01.10
любопытное поведение union all в SQL через BDE...


4-28557
vovan1
2001-11-08 18:35
2002.01.10
CreateProcess





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский