![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как устранить мерцание вторичных окон?
Селезин © (2006-08-20 02:28:00)Имеется, значит три TImage, нижний (1-й) по размерам совпадает с окном, два верхних лежат поверх, частично перекрывая нижнее (3-е перекрывает еще и 2-е), причем оба с прозрачностью. При перерисовке канвы 1-го окна часто (но не всегда) два верхних окна мерцают. Поскольку нижнее окно подчас перерисовывается достаточно часто, мерцание утомляет. Можно с этим как-то справиться? Нижнее окно не слишком волнует, а вот верхние два хотелось бы иметь визуально немерцающими.
Loginov Dmitry (2006-08-21 19:09:00) [1]> Два TBitmap - не есть гуд. Лучше один TBitmap под буфер
> а выводить на TPaintBox или непосредсвенно на конкретно
> нужную канву.
Почему не есть гуд? Зависит от ситуации. Допустим есть статичная картинка, на которой рисуются динамически какие-то изображения. Под статичную картинку естестенно выделить отдельный буфер. Далее можно этот буфер скопировать во второй Битмап, и в нем уже рисовать.
> Селезин © (21.08.06 00:57) [6]
Операций с чтением из файла должно быть как можно меньше. Это самая длительная операция.
Мефисто (2006-08-21 12:52:00) [2]Как часто требуется перерисовывать изображение? Как часто подгружаются файлы в имиджи? При DoubleBuffered создается еще один временный TBitmap
Селезин (2006-08-21 00:57:00) [3]Ну DoubleBuffered отлично справляется. А что за возможные глюки с ним? Покуда ничего не видел.
Насчет остального. Не знаю насколько сэкономится памяти при прорисовке на одну канву. Дело в том, что два верхних окна мобильные и могут во время работы приложения подсчитываться из разных файлов на диске. Как-то не уверен, что отрисовка на канву одного имадже сильно сэкономит память, если каждый раз придется выкачивать две картинки из файла. Так что как бы один черт нужно три канвы. И плюс еще одна для сведенного рисунка? Или считывание картинки из файла берет памяти и времени меньше, чем хранимая на канве копия?
Мефисто (2006-08-20 11:51:00) [4]
> 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) от мерцания избавиться будет невозможно.
aster_x (2006-08-20 11:31:00) [5]
> лишние расчеты пойдут
Когда прорисовываешь, на одну канву. то пикселы накладываются друг на друга.
Так что все равно много не с экономишь времени.
Зато памяти можно поберечь дай бог.
Loginov Dmitry (2006-08-20 09:55:00) [6]> лишние расчеты пойдут
Что за лишние расчеты?
Выполняйте всю прорисовку в буфере в памяти (TBitmap) (соответственно их должно быть 3 штуки), а при необходимости выводите их содержимое на канву TImage с помощью Image1.Canvas.Draw(X, Y, Bitmap);
В итоге никаких мерцаний не будет, и глюков, связанных с Form1.DoubleBuffered.
Селезин (2006-08-20 03:10:00) [7]Thank, DoubleBuffered помог.
А рисовать на один имадж не хочется, лишние расчеты пойдут, оно, конечно лучше, но не в моем случае.
Pavia (2006-08-20 02:37:00) [8]Попробуй Form1.DoubleBuffered:=True;
А вобще правелнее сделать один имадж, или еще лучше без него прям на канве формы рисовать.
Советую посмотреть TransparentColor example и отрисовку повесить на событие OnPaint