Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.027 c
3-1154079824
Vir
2006-07-28 13:43
2006.10.01
ADO Events


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


1-1155808591
Dexter12345
2006-08-17 13:56
2006.10.01
Экспорт в OpenDocument через Delphi


2-1158090623
Murava
2006-09-12 23:50
2006.10.01
PostMessage(<окно>, wm_LButtonDown, 0, <координаты>)-не пашит :(


6-1147041602
socketlamer
2006-05-08 02:40
2006.10.01
закачка с нескольких




   Наверх