Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Вниз

Как устранить мерцание вторичных окон?   Найти похожие ветки 

 
Селезин ©   (2006-08-20 02:28) [0]

Имеется, значит три TImage, нижний (1-й) по размерам совпадает с окном, два верхних лежат поверх, частично перекрывая нижнее (3-е перекрывает еще и 2-е), причем оба с прозрачностью. При перерисовке канвы 1-го окна часто (но не всегда) два верхних окна мерцают. Поскольку нижнее окно подчас перерисовывается достаточно часто, мерцание утомляет. Можно с этим как-то справиться? Нижнее окно не слишком волнует, а вот верхние два хотелось бы иметь визуально немерцающими.


 
Pavia ©   (2006-08-20 02:37) [1]

Попробуй Form1.DoubleBuffered:=True;
А вобще правелнее сделать один имадж, или еще лучше без него прям на канве формы рисовать.
Советую посмотреть TransparentColor example и отрисовку повесить на событие OnPaint


 
Селезин ©   (2006-08-20 03:10) [2]

Thank, DoubleBuffered помог.
А рисовать на один имадж не хочется, лишние расчеты пойдут, оно, конечно лучше, но не в моем случае.


 
Loginov Dmitry ©   (2006-08-20 09:55) [3]

> лишние расчеты пойдут


Что за лишние расчеты?

Выполняйте всю прорисовку в буфере в памяти (TBitmap) (соответственно их должно быть 3 штуки), а при необходимости выводите их содержимое на канву TImage с помощью Image1.Canvas.Draw(X, Y, Bitmap);
В итоге никаких мерцаний не будет, и глюков, связанных с Form1.DoubleBuffered.


 
aster_x ©   (2006-08-20 11:31) [4]


> лишние расчеты пойдут

Когда прорисовываешь, на одну канву. то пикселы накладываются друг на друга.
Так что все равно много не с экономишь времени.
Зато памяти можно поберечь дай бог.


 
Мефисто   (2006-08-20 11:51) [5]


> Loginov Dmitry ©   (20.08.06 09:55) [3]


Два TBitmap - не есть гуд. Лучше один TBitmap под буфер а выводить на TPaintBox или непосредсвенно на конкретно нужную канву.


> aster_x ©   (20.08.06 11:31) [4]



> Когда прорисовываешь, на одну канву. то пикселы накладываются
> друг на друга.Так что все равно много не с экономишь времени.
>


Не ясна суть данного высказывания.
И как в твоем случае память экономится?

А по вопросу совет уже дан. Отрисовывать все в буферном TBitmap и выводить все за один присест. Мерцать компонеты будут, т.к. сие компонеты получают сообщение от системы что нужно перерисоваться т.к. все время самый нижний TImage перерисовывается. При таком подходе как Селезин  ©   (20.08.06 02:28)  от мерцания избавиться будет невозможно.


 
Селезин ©   (2006-08-21 00:57) [6]

Ну DoubleBuffered отлично справляется. А что за возможные глюки с ним? Покуда ничего не видел.
Насчет остального. Не знаю насколько сэкономится памяти при прорисовке на одну канву. Дело в том, что два верхних окна мобильные и могут во время работы приложения подсчитываться из разных файлов на диске. Как-то не уверен, что отрисовка на канву одного имадже сильно сэкономит память, если каждый раз придется выкачивать две картинки из файла. Так что как бы один черт нужно три канвы. И плюс еще одна для сведенного рисунка? Или считывание картинки из файла берет памяти и времени меньше, чем хранимая на канве копия?


 
Мефисто   (2006-08-21 12:52) [7]

Как часто требуется перерисовывать изображение? Как часто подгружаются файлы в имиджи? При DoubleBuffered создается еще один временный TBitmap


 
Loginov Dmitry ©   (2006-08-21 19:09) [8]

> Два TBitmap - не есть гуд. Лучше один TBitmap под буфер
> а выводить на TPaintBox или непосредсвенно на конкретно
> нужную канву.


Почему не есть гуд? Зависит от ситуации. Допустим есть статичная картинка, на которой рисуются динамически какие-то изображения. Под статичную картинку естестенно выделить отдельный буфер. Далее можно этот буфер скопировать во второй Битмап, и в нем уже рисовать.


> Селезин ©   (21.08.06 00:57) [6]


Операций с чтением из файла должно быть как можно меньше. Это самая длительная операция.



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

Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.014 c
1-1155780530
_HAWK_
2006-08-17 06:08
2006.10.01
Картинки в ListBox e


2-1157715613
Alral
2006-09-08 15:40
2006.10.01
Poisk v TKomboBox


2-1157984741
SamProf
2006-09-11 18:25
2006.10.01
TForm.onShow или как там


1-1156108386
Out
2006-08-21 01:13
2006.10.01
Перехват сообщений


6-1139698111
msdn11
2006-02-12 01:48
2006.10.01
AT+CMGS sms не уходит





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский