Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как быстро передвинуть Image? [D7, Win2k]


bulanov ©   (2004-11-24 04:07:00) 

Подскажите пожалуйста как разрешить следующую проблему:
мне необходимо (с шагом 1-2 пикселя) двигать картинку на форме (допустим слева-направо), причем очень быстро. Как бы я не пытался это осуществить у меня ничего не выходит, двигается слишком медленно (и просто двигал, и перерисовывал на канву по указанным координатам и копировал). Увеличение шага сдвига приводит к тому, что при выполнении еще каких-либо задач приложением, картинка при перемещении начинает жутко искажаться.


bulanov   (2004-11-24 04:48:00) [1]

ой, блин не заметил =-))))
спасибо.


Defunct   (2004-11-24 04:43:00) [2]

> я написал что нужна скорость пикселей 400 в секунду

эх.. я же понятия не имею, что есть для вас скорость 400 пикселей в секунду...


Defunct   (2004-11-24 04:41:00) [3]

bulanov   (24.11.04 04:39) [4]

Уберите Sleep.
Sleep регулирует скорость перемещения.


bulanov   (2004-11-24 04:39:00) [4]

не совсем то что нужно,
я написал что нужна скорость пикселей 400 в секунду, а этот пример рисует в 6 раз меленнее.
если увеличиваю шаг dec(i);начинаются искажения.


Defunct   (2004-11-24 04:30:00) [5]

Кнопкой запускается, той же кнопкой и останавливется.

procedure TForm1.Button1Click(Sender: TObject);
var
   Bmp : TBitmap;
   i   : Integer;
begin
 if TButton(Sender).Tag > 0 then TButton(Sender).Tag := 0 else
 begin
   Bmp := TBitmap.Create;
   with TButton(Sender) do
   Try
     Tag := 1;
     Try
       bmp.LoadFromFile('C:\Test.bmp'); // <-- Ваш рисунок
       Canvas.Pen.Color := Color;
       i := Self.Width - bmp.Width;
       while Tag>0 do
       begin
         dec(i);
         if i < - bmp.Width then i := Self.Width - bmp.Width;
         Canvas.Draw(i, 20, bmp);
         Canvas.MoveTo( i + bmp.Width, 20);
         Canvas.LineTo( i + bmp.Width, 20 + bmp.Height );
         Sleep(2);
         Application.ProcessMessages
       end
     except
       On E:Exception do ShowMessage( E.Message )
     end
   finally
     Bmp.Free
   end
 end
end;


bulanov   (2004-11-24 04:27:00) [6]

400 пикселей в секунду


ЮЮ   (2004-11-24 04:19:00) [7]

>(с шагом 1-2 пикселя) очень быстро.

определись: с шагом или быстро :)
скорость = пикселм в секунду. шаг должен зависить от того, сколько времени прошло к моменту очередной перерисовем


Наверх

Титульная страница Поиск, карта сайта Написать письмо