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

Вниз

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

 
Vasiliy   (2003-05-10 21:14) [0]

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


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

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

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


 
AlexRush ©   (2003-05-15 16:48) [2]

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


 
AlexRush ©   (2003-05-15 16:53) [3]

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


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

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


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

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


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


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

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


 
Delphi5.01 ©   (2003-05-17 20:35) [7]

>Думкин>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-19 04:55) [8]

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



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

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

Наверх




Память: 0.48 MB
Время: 0.031 c
4-48829
jenya_d1
2003-07-15 08:37
2003.09.15
Выбор имени сервера в сети


3-48443
Clonnyc
2003-08-25 02:44
2003.09.15
Ошибка при открытии .db - файла


7-48795
Vyacheslav
2003-06-30 11:41
2003.09.15
Виртуальный диск


3-48459
mOOx_
2003-08-23 14:34
2003.09.15
Общий count...


14-48742
DProg
2003-08-26 16:55
2003.09.15
Компоненты для построения диаграмм типа UML диаграмм классов