Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.29;
Скачать: CL | DM;

Вниз

Двойная буферизация   Найти похожие ветки 

 
VladOfMonster   (2009-10-01 09:31) [0]

Как сделать двойную буферизацю элементов управления???

В Delphi 5,6,7,8 и т.д. есть свойство для элементов управления - DoubleBuffered, но если анимацию я захочу сделать, то это свойство не спасет.

Как сделать двойную буферизацию??? В Microsoft Power Point она присутствует, если её не было - все мерцало бы до ужаса!


 
tesseract ©   (2009-10-01 10:10) [1]


> Как сделать двойную буферизацию???


Кто тебе сказал, что там двойная буферезация? Чтобы не мерцало конечно надо сделать буфер вывода. Я сам paint переписывал, чтобы изменения самой картинки изменялся только при изменении размеров, помогало.


 
VladOfMonster   (2009-10-01 10:15) [2]

Ну и какой код двойной буферизации, tesseract?


 
test ©   (2009-10-01 10:18) [3]

VladOfMonster   (01.10.09 10:15) [2]
CopyRect и две канвы, во всяком случае меня так было и никакого мерцания, аналог Арканоида на TCanvas ))


 
VladOfMonster   (2009-10-01 11:04) [4]

а с TCanvas, чё копировать???


 
DVM ©   (2009-10-01 11:10) [5]


> VladOfMonster

Чтобы избавиться от мерцания, надо понимать причину ее возникновения. А причина мерцпния всегда одна и та же. Перерисовка контрола производится в 2 этапа:
1) Стирание фона. При этом контролу приходит сообщение WM_ERASEBKGND.
Контрол в ответ рисует свой фон.
2) Рисование переднего плана. Контролу приходит WM_PAINT контрол рисует передний план.

Между 1) и 2) проходит какое то время, иногда (если особенно 2 затягивается из за сложного рисования) в результате мы успеваем заметить фон контрола.
Отсюда вывод:
Чтоб не мерцало надо либо не стирать фон вообще (в ряде случаев годится),  либо рисовать сначала в буфере, а уж потом перерисовывать картинку (т.е. стирать фон и рисовать передний план).


 
DVM ©   (2009-10-01 11:13) [6]


> VladOfMonster


> Как сделать двойную буферизацю элементов управления???

А сделать очень просто, можно посмотреть реализацию DoubleBuffered в D7 и выше, а лучше в D2007 и выше там она усовершенствована.


 
VladOfMonster   (2009-10-01 11:16) [7]

А как сделать реализацию двойного буфера на Microsoft Visual C++ в MFC???


 
DVM ©   (2009-10-01 11:18) [8]


> VladOfMonster   (01.10.09 11:16) [7]

Да точно так же. А если нужен конкретный код, то спросить на форуме по MSVC


 
VladOfMonster   (2009-10-01 11:18) [9]

> DVM
а ты не знаешь ссылку на форум???


 
DVM ©   (2009-10-01 11:20) [10]


> а ты не знаешь ссылку на форум???

в правый верхний угол этой страницы погляди, сразу за этой конференцией.


 
VladOfMonster   (2009-10-01 11:21) [11]

> DVM
thank you!(спасибо)



Страницы: 1 вся ветка

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
15-1254141163
jack128_
2009-09-28 16:32
2009.11.29
Эксперт для работы с SVN ??


3-1230463282
tipman
2008-12-28 14:21
2009.11.29
update в MSO Access через Jet4.0 более 127 полей


15-1254136426
картман
2009-09-28 15:13
2009.11.29
Паттерн наблюдатель


2-1255592105
zorik
2009-10-15 11:35
2009.11.29
xml edit


15-1254656776
Denis__
2009-10-04 15:46
2009.11.29
настройки модема D-Link 2500U