Вопрос: двойная буферизация!? Проблемы с мерцанием на канве

  • Автор темы woka
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

woka

#1
как зделать двойную буферизацию на билдере? чтото типо
C++:
Form -> DoubleBuffer
но как именно дальше н помню
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
C++:
		for (int i =0; i<100;i++)
{
Form1->DoubleBuffered = true;
Form1->Canvas->Brush->Color = RGB(i,0,0);
Form1->Canvas->Rectangle(10,10,120,120);
Form1->Canvas->Brush->Color = clRed;
Form1->Canvas->Ellipse(10+i,10+i,20+i,20+i);
Application->ProcessMessages();
Sleep(100);


}
 
W

woka

#3
А зачем цыкл стоит перед Form1->DoubleBuffered = true;
да и зачем остальная часть этого же должно хватить
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
Просто как пример....
А DoubleBuffered - за цикл конечно же... Случайно захватил его...
 
W

woka

#5
на форм1 устанавливается буферизация, но у меня по экрану передвигается объект который как моргал так и моргает. может добавить ещё одну строку и вместо форм1 написать имя того обЪекта? или есть другие варианты?
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
Рисуй в памяти просто и ничего дрыгатся не будет...
Кидай свой код, покажу...
 

DarkKnight

Well-known member
01.08.2010
653
0
#7
Вообще можно не перерисовывать контролы попробовать, должно помочь.. Не всегда но помогает...
Вот так:

C++:
Form1->ControlStyle << csOpaque;
Form1->DoubleBuffered = true;
 

DarkKnight

Well-known member
01.08.2010
653
0
#9
Не, ну если так оно и есть ;-)))

2 woka : А вот память никогда не подводит ;-))) Примерно писать нужно так:
Создаем TBitmap, указываем его размер (в данном случае RECT-канвы), рисуем что-то там, и говорим что бы канва формы съела память битмапы...

C++:
		Graphics::TBitmap *bitmap = new Graphics::TBitmap();
bitmap->Width = 400;
bitmap->Height= 400;
bitmap->Canvas->Rectangle(0,0,100,100);
Form1->Canvas->StretchDraw(Rect(0,0,400,400),bitmap);
Этот вариант уже 100ый :)
 
W
#10
а ничего попроще нет? а то я никогда непользовался этим и низнаю что к чему и как этой функцией пользоваться. а кокую часть кода тебе кидать или весь?
 

DarkKnight

Well-known member
01.08.2010
653
0
#11
Я же говорю, тогда так сделай :
C++:
Form1->ControlStyle << csOpaque;
Form1->DoubleBuffered = true;
 
Статус
Закрыто для дальнейших ответов.