Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-48544
evg
2003-09-02 09:00
2003.09.15
Ошибка при выгрузке DLL.


1-48588
LeNa19
2003-09-03 22:06
2003.09.15
как прописатся в правой кнопке мыши експлоера


3-48419
sash2
2003-08-25 22:28
2003.09.15
Копирвание Dbf файлов.


1-48491
ЮРИЙ_К
2003-09-03 12:06
2003.09.15
Как привязаться к относительным координатам ветки дерева TreeView


14-48699
vajo
2003-08-28 15:14
2003.09.15
Переход зимнее-летнее время в винде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский