![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отрисовка XP контролов. Bug.
AndreyRus © (2006-05-04 14:10:00)Я заметил, что отрисовка контролов, при использовании манифеста, в стиле "Win XP" происходит во время показа формы. Особенно это заметно на TFT-мониторах, в следствии их инерционности. Проблему удалось решить назначив контролам и форме (хотя, непонятно зачем и для формы) свойство- DoubleBuffered. Однако если контролы находятся в GroupBox то при их прорисовке происходит "глюк" - RadioBox становиться черным, кнопки обрисовываются черной линией и.т.д. Знает ли кто нибудь как бороться с этой ошибкой.
AndreyRus (2006-05-05 19:34:00) [21]
> Прорисовка с двойной буферизацией даже в теории не может
> занимать меньшее время
Разумеется. Я неверно выразился, говоря о скорости прорисовки. Контролы рисуются не быстрее, а полностью сформированные(нарисованные). На моем компьютере в момент отображения формы я отчетливо вижу как рисуется контрол, т.е. мигание в области его TRect и последующая обрисовка краев. Это, кстати, присуще и VCL.
> стоит ли убирать с дороги камешек, если на пути впереди
> все равно гора?
Очень даже стОит. Например, в досточно сложных программах, таких как MS Office, отображение диалоговых окон даже с большим количеством элементов управления происходит практически как единичный BitBlt. Тоже самое можно было бы сделать и в KOL, если бы ни этот камушек.
homm (2006-05-05 18:18:00) [22]
> то, о чем я говорил в [9]
сори, в [4]
homm (2006-05-05 18:16:00) [23]
> 1. Мне неизвестно почему необходимо буферизировать и форму
> и контрол.
Такая реализация. Просто если бужеризован И родитель И дочерний контрол, то дочерний контрол отрисовывает прямо на буфере родителя, не создавая свой собственный.
> Я стал искать способ борьбы с этим эффектом и обнаружил,
> что если у контролов и формы (обязательно! Но непонятно
> зачем?) DoubleBuffered:= true, то форма контролы прорисовываются
> гораздо быстрее
Прорисовка с двойной буферизацией даже в теории не может занимать меньшее время, тем более на практике. В том ее и смысл, что она происходит в НЕВИДИМЫЙ буфер (за то-же самое время), после чего весь этот буфер мгновенно копируется на экран (в видео память).
> 2. Почему возникают проблемы с отрисовкой контролов находящихся
> в контейнере.
Похоже ты прав, и такой эффект действительно имеет быть, причем это не совсем тот-же эффект о котором я говорил. Но я даже не стану смотреть, возможно ли его исправить (чотя чувствую что возможно) по одно простой причине: то, о чем я говорил в [9] исправить уже никак нельзя, так что стоит ли убирать с дороги камешек, если на пути впереди все равно гора?
AndreyRus (2006-05-05 15:54:00) [24]Что такое буферизация мне хорошо известно.
1. Мне неизвестно почему необходимо буферизировать и форму и контрол.
2. Почему возникают проблемы с отрисовкой контролов находящихся в контейнере.
ECM (2006-05-05 14:56:00) [25]
> Конфигурация моего компьютера - Pentium II (Celeron) 300
> Мгц, старая видюха на медленной шине, но 19" TFT монитор
И это все под ХР? - может не надо мучать технику? :)
> обязательно! Но непонятно зачем?) DoubleBuffered:= true,
>
А почитать (погуглить) что это такое уже лень?
Doube - (двойной) - вся отрисовка производится во втром буфере( буфер в памяти) а вывод на экран производится быстрой операцией копирования BitBlt. Иначе все операции отрисовки производятся прямо в экранный буфер (DC)
AndreyRus (2006-05-05 14:27:00) [26]Напали на новичка и заели :) , забыв о сути.
Конфигурация моего компьютера - Pentium II (Celeron) 300 Мгц, старая видюха на медленной шине, но 19" TFT монитор. При такой конфигурации я отчетливо вижу, что обрисовка контролов формы, особенно в стиле XP происходит в момент показа отображения формы - Form.Show. Я стал искать способ борьбы с этим эффектом и обнаружил, что если у контролов и формы (обязательно! Но непонятно зачем?) DoubleBuffered:= true, то форма контролы прорисовываются гораздо быстрее, без эффекта отрисовки в момент их отображения, но если они находятся в контейнере, например - GroupBox, то наблюдается ошибка при их отображении, в виде искажения цветов.
homm (2006-05-05 07:28:00) [27]Чудеса говорите. Хорошую книжку по WinAPI вым почитать надо. Система же не будет сама буфер создавать перед появленем окна, по 2-м вполне обоснованым причинам. 1) каким-то приложениям он и не нужен, а оперативу и/или видео засоряет 2) Для каких-то операций прорисовки (как например с этими глупыми тетмами, кстати) буферная канва неприемлима, нужна экранная.
AndreyRus (2006-05-05 00:46:00) [28]
> Какая верси KOL у Вас ?
2.34
AndreyRus (2006-05-05 00:13:00) [29]
> > Я заметил, что отрисовка контролов, при использовании
> манифеста,
> > в стиле "Win XP" происходит во время показа формы.
> Зашибись! А когда же ей еще происходить?
IMHO. Отрисовка сложных графических элементов должна производится не в момент отображения формы, а до него.
homm (2006-05-04 23:56:00) [30]ЗЫ Какой-то я весь сегодня на нервах. Простите, если что...
homm (2006-05-04 23:55:00) [31]
> [3] ECM © (04.05.06 18:11)
Неа, пусть лучше прочитает ветку где прозрачность by me впервые появилась, там то-же самое написано.
И еще
> Я заметил, что отрисовка контролов, при использовании манифеста,
> в стиле "Win XP" происходит во время показа формы.
Зашибись! А когда же ей еще происходить?
homm (2006-05-04 23:50:00) [32]
> AndreyRus (04.05.06 14:10)
Дохлый Bug Report. Я сразу сказал, фиг будут новые темы рисоватся с моей прозрачностью. Все вопросы на support@microsoft.com, т.к. это только их темк не рисуется правильно. Есть по-настоящему качественные темы, созданые с нуля а не с microsoftовского примера, в которых проблем нет. Пример - тема MacOS (другие на вскидку не помню). Хочеш красивости - юзай GRush.
ECM (2006-05-04 18:11:00) [33]Какая верси KOL у Вас ?
Описанные эффекты в последней версии (у меня точно) полностью отсутствуют.
Почитайте
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1136725971&n=10
AndreyRus (2006-05-04 17:28:00) [34]
> А если попробовать графические контролы (windowed=false)?
В этом случае контролы вообще не отображаются, пока на них не навести курсор мыши. К тому же теряется отображение в стиле "Windows XP".
ECM (2006-05-04 14:42:00) [35]А если попробовать графические контролы (windowed=false)?