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

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

Как избавиться от мерцания формы при перерисовке


Vasiliy ©   (2003-05-10 21:14:00) 

Может ктонибудь подскажет как избавиться от этой проблемы, гдето читал что нужно синхронизировать перерисовку с частотой обновления экрана, может быть есть другие способы?


Думкин   (2003-05-19 04:55:00) [1]

> Delphi5.01 © (17.05.03 20:35)
Про ДиректХ я речь и не вел. Можно все и без него сделать.
А с ускорением - тут много можно чего сделать - просто вопрос не уточнен.


Delphi5.01   (2003-05-17 20:35:00) [2]

>Думкин>AlexRush>Still Swamp>
Chto kasaetsa DirecX, eto reshenie problemmi, no vzamen poluchaesh bolshoi kod (bes truda ne nakataesh progu na delffax).
A vot chto kasaetsa BitMap i BitBlt to vot eto, vradli, u mena poxojaia problemma bila. Bolee tochnei nujno utochnit votos, kogda migaer forma? elsli pri animacii to BitMap+BitBlt+Draw(v slucher Transparent) dostatochno. no esli migaet kogda peretaskivaesh formu (kak u mena), to togda nado uskorat risovanie v Paint-e, lishnie operacii vikinut.
Mne kajetsa chto edinstvennoe reshenie DirectX (2 AlexRush chto kasaertsa CreateCompatibleDC nemogu prokomentirovat ne ispolzoval no ochen interesno poslushat bolee podrobnuiu infu).
Jelau xorosho i bistro napisat progu!


Думкин   (2003-05-17 08:42:00) [3]


> Плохой человек (15.05.03 17:00)

Это верно. Но... иногда такие тормозы вылазят.
Лучше по-хорошему разобраться с WM_Paint и использовать Still Swamp.
Но тут много ньюансов - во-первых чего хотим?


Still Swamp   (2003-05-15 17:41:00) [4]

TO AlexRush
Это верно, однако человеку с нуля начинающему разбираться, легче осмыслить на битмапе. Потом можно и далее.


Плохой человек   (2003-05-15 17:00:00) [5]

Если мерцают компоненты, а именно потомки TWinControl, то надо ставить DoubleBuffered в True.


AlexRush   (2003-05-15 16:53:00) [6]

Vasiliy >> А на счет синзронизации с обновлением экрана - под DOSом это было прерывание обратного хода луча, а под Окнами... по-моему DirectX кат-то с этим разбирается, не знаю точно. Можешь спросить в ветках Media и Игры.


AlexRush   (2003-05-15 16:48:00) [7]

Still Swamp >> Идея абсолютно верная. Но для быстрой работы с графикой TBitmap не годится, и вообще рисовать на нем не рекомендую. Я кат-то смотрел его исходники в VCL- много лишней работы. Стандартный прием - Создание совместимого контекста устройства (CreateCompatibleDC), рисования всего вывода на нем, а в главном окне, на WM_PAINT копировать необходимый кусок с виртуального на реальный DC (BitBlt). Рекомендую так же посмотреть ф-ю ScrollWindowEx - может оказаться полезной.
Если изображение динамично (непрерывно меняется), то перерисовываем опять-таки нужную часть виртуального DC и копируем эту часть на реальный DC (Через CallWindowProc чуть бустрее, или напрямую вызуваем обработчик WM_PAINT"а).


Still Swamp   (2003-05-15 15:11:00) [8]

на счет обновления даже и не знаю.
мерцает - потому что ты успеваешь заметить последовательность действий вывода - те,
очистка формы - увидел белый фон
вывод элементов - увидел рябой фон и тд...
что бы этого н было, выводи все ня TBitMap, а затем его canvas на форму.

var
TempBitmap:TBitmap;
begin
TempBitmapBitmap:=TBitmap.Create;
TempBitmapBitmap.Height:=Form.ClientHeight;
TempBitmapBitmap.Width:=Form.ClientWidth;
TempBitmapBitmap.Canvas.... рисуешь...
Form.CopyRect.....
TempBitmapBitmap.Free;
end;


Наверх

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