Форум: "Media";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизКак избавиться от мерцания формы при перерисовке Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c