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

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

Отрисовка XP контролов. Bug.


Страницы:   1 2

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)?


Страницы:   1 2

Наверх

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