Главная страница
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.019 c
15-1254078510
DillerXX
2009-09-27 23:08
2009.11.29
подскажите как сделать avi из картинки + mp3


4-1223538073
Дмитрий Белькевич
2008-10-09 11:41
2009.11.29
Асинхронный ввод двух бит через ком порт


13-1124173184
LOS_A
2005-08-16 10:19
2009.11.29
Вызов Tform из dll


15-1254404923
Drowsy
2009-10-01 17:48
2009.11.29
Изменение файла..


15-1254429012
Юрий
2009-10-02 00:30
2009.11.29
С днем рождения ! 2 октября 2009 пятница