Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnPaint = 100 раз ?!.. [Delphi, Windows]


Vladimyr ©   (2004-11-20 17:10:00) 

Написал обработчик события OnPaint для стандартной панели, который увеличивает некую переменную на 1 и затем выводит её значение на экран.
Оказалось, что при потере и последующем получении окном фокуса значение счётчика увеличивается на 70, если окно было частично закрыто, и на 102, если окно было закрыто полностью.
Это что же получается: Windows перерисовывает контрол 100 раз??
Кто-нибудь может прокомментировать сей факт?


ecm   (2004-11-21 20:14:00) [1]

Ничё - не сЦать - поправим!


Vladimyr   (2004-11-21 20:08:00) [2]

Сорри, нашёл Transparent!!! ~@:-}
(поиском в "Core1_1.inc", всего одна(!) метка)

Все пишущие на KOL, будьте внимательнее!
(иначе будет вот такая ботва :--C


Vladimyr   (2004-11-21 19:57:00) [3]

Спасибо за ответ, но у меня в проекте нет ни DoubleBuffered, ни Transparent.
Может ли такую роль играть BitBtn? TabControl? Panel?

И ещё одно наблюдение: добавление одного элемента в проект вызывает увеличение количества перерисовок за один раз на 2, удаление - уменьшение на 2. Если форма была перекрыта частично, то количество перерисовок равно количеству закрытых ранее контролов. То есть, при перерисовке окна OnPaint вызывается для каждогоконтрола!!!

То есть, если в проекте 10 контролов, OnPaint будет вызвана 20 раз для каждого контрола!
Это ошибка моя или KOL?
Чем это может быть вызвано?


Владимир Кладов   (2004-11-21 07:59:00) [4]

У меня увеличивается ровно на 1. У вас наверняка есть что-то прозрачное (Transparent) или используется DoubleBuffered. Или есть тулбар в стиле flat - в ХР добавится transparent. Красиво, но... Или давайте кто-нибудь всерьез займется исправлением DoubleBuffered+Transparent.


Наверх

Титульная страница Поиск, карта сайта Написать письмо