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

Вниз

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

 
Селезин ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.122 c
8-1141829461
Handle
2006-03-08 17:51
2006.10.01
Изменение размера bmp.


15-1157972190
SergP
2006-09-11 14:56
2006.10.01
Как сделать чтобы винда сама прописывала маршруты?


2-1157726008
gear
2006-09-08 18:33
2006.10.01
отловить выпадение Access Violation...


1-1155801487
lex67
2006-08-17 11:58
2006.10.01
Как сделать паузу


15-1157767871
homm
2006-09-09 06:11
2006.10.01
DMClient