Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Мирцание


Автор: Edd 23.3.2006, 17:47
Двигаю Image с помощью Timer по форме (В принципе по другому Image, но он у меня как фоновый ресунок)
Я попробовал в C++ Builder 5.0
Код

DoubleBuffered = True;

Непомогает.
Пытался со Screen-ом (Чтоби монитор дорисовывал до конца екрана, а потом то сто надо ресовал бы), программе код не нравилса (Пытался как в Delphi сделать).
Помогите пожалуйста.

Автор: Romikgy 23.3.2006, 17:53
Цитата(Edd @ 23.3.2006, 16:47 Найти цитируемый пост)
Timer

интервал какой?

Автор: _hunter 23.3.2006, 17:55
помогти чем?
могу посоветовать уменьшить размер рисунка -- 10*10 мерцать не должен...

Автор: Edd 23.3.2006, 18:01
Интервал 20;
Размер рисунка 32*32 (Мячик);

Автор: Romikgy 23.3.2006, 18:05
Мож код тяжелый в таймере, бо 50 Гц изменения картинки, ты на глаз не увидишь

Автор: Edd 23.3.2006, 18:12
Код не большой (10 строк (3 If; 2 на перемещение (Left & Top); остальное вычисление));
Медленней нехотелосьбы, слишком большая погрешность выходит.

Автор: Бегемот 23.3.2006, 19:21
Edd, двигай битовый образ CopyRect'ом.
Примерно вот так!
Код

TRect BallRect;
TRect BackgroundImageRect;
Graphics::TBitmap *Ball;
int i=0;
..........................

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   Ball = new Graphics::TBitmap();
   Ball->LoadFromFile("Ball.bmp");
   BallRect = Rect(0, 0, Ball->Width, Ball->Height);
}


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   if(i<Left)
   {
      BackgroundImageRect = Rect(i,100,i+Ball->Width,100+Ball->Height);
      BackgroundImage->Canvas->CopyRect(BackgroundImageRect, Ball->Canvas, BallRect);
      i++;
   }
}

Автор: Edd 23.3.2006, 21:45
Бегемот, я возможно понимаю вашу идею, но программа ругается на BackgroundImage.
Если вы имели в виду рисовать на форме, то это несовсем то что мне надо. Мне надо перемещать Image.
В Delphi, прочитал, решалось с помощью:

Screen.Canvas.CopyRect((0,0,Screen.Width,Screen.Height), BackgroundScreen.Canvas,(0,0,Screen.Width,Screen.Height));

(Писал по памяти, возможно нетак, идея такая)
В C++ Builder 5.0 такая фишка не прошла, там какието другие обазночения. Какие? Я не знаю.
smile

Автор: Бегемот 24.3.2006, 20:22
Цитата

Двигаю Image с помощью Timer по форме (В принципе по другому Image, но он у меня как фоновый ресунок)

Цитата

программа ругается на BackgroundImage


Edd, BackgroundImage - это и есть тот самый фоновый рисунок по которому вы гоняете мяч! smile
Замените его имя (Name) Image на BackgroundImage!

Цитата

Мне надо перемещать Image

Честно говоря, не совсем понимаю, в чём преимущество такого подхода перед перемещением TBitmap'а! Почему необходимо перемещать именно Image?

Автор: Edd 25.3.2006, 09:33
Цитата

Почему необходимо перемещать именно Image?

У меня в программе двигаются несколько обьектов, один из них мячик. Чтобы не надобыло-бы перерисовывать всё с Canvas, я двигаю обьекты Image.
Возможно это не рационально, но переделывать уже 1) Лень; 2) Позновато.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)