Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 19:44   #1
Yougan
 
Регистрация: 30.03.2011
Сообщений: 7
По умолчанию Как заставить Image двигаться по прямой к указанной точке?

Извините, что отнимаю ваше драгоценное время своим вопросом. Суть моей проблемы в том, что имеется Image с определенными координатами начала движения, и есть координаты точки окончания его движения. Мне надо сделать так, что Image двигался в таймере по прямой от точки начала движения к точке конца. Не подскажете, как сделать?
Yougan вне форума Ответить с цитированием
Старый 30.05.2011, 03:09   #2
~Psycho~
Пользователь
 
Аватар для ~Psycho~
 
Регистрация: 11.12.2010
Сообщений: 44
По умолчанию

самое простое
На примере из правого нижнего угла в левый верхний
image1.left := image1.left + 1;
Image1.Top := image1.top + 1;
If image1.left = 0 then
Begin
timer1.Enable := false;
End;
If image1.top = 0 then
Begin
Timer1.enable := false;
End;
Отражаю отношение к себе
~Psycho~ вне форума Ответить с цитированием
Старый 30.05.2011, 09:30   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

это коряво.. уж извините )) гораздо лучше так:
Код:
var sxpos, fxpos, sypos, fypos: integer;
cx, cy, dx, dy : extended;
...
procedure button1click(sender : tobject);
begin
sxpos := image1.left;
sypos := image1.top;
fypos := strtoint(Edit1.Text); 
fxpos := strtoint(Edit1.Text); // где-то уже получили координаты, рассчитываем смещение

if abs(fxpos - sxpos) > abs(fypos - sypos)
  then begin
    dy := (fypos - sypos)/abs(fxpos - sxpos);
    dx := 1;
  end
  else begin
    dx := (fxpos - sxpos)/abs(fypos - sypos);
    dy := 1;
  end;
cy := sypos;
cx := sxpos;
timer1.enabled := true;
end;

procedure timer1.timer(sender : tobject);
begin
cy := cy + dy;
cx := cx + dx;
image1.left := round(cx); 
image1.top := round(cy);
if ( image1.left = fxpos) and ( image1.top = fypos)
  then Timer2.Enabled := false;
end;
phomm вне форума Ответить с цитированием
Старый 30.05.2011, 11:25   #4
~Psycho~
Пользователь
 
Аватар для ~Psycho~
 
Регистрация: 11.12.2010
Сообщений: 44
По умолчанию

Цитата:
это коряво.. уж извините ))
Это было просто для наглядности))
Отражаю отношение к себе
~Psycho~ вне форума Ответить с цитированием
Старый 30.05.2011, 17:34   #5
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

http://programmersforum.ru/showthread.php?t=153887

Есть готовый пример, компонент бегает за мышью
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 30.05.2011, 21:14   #6
Yougan
 
Регистрация: 30.03.2011
Сообщений: 7
По умолчанию

Спасибо, компонент не нужен.
Yougan вне форума Ответить с цитированием
Старый 30.05.2011, 23:59   #7
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Цитата:
Спасибо, компонент не нужен.
А чем TImage не компонент. там просто показан приницип.
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить код работать во всех книгах указанной папки KNatalia Microsoft Office Excel 12 25.12.2012 11:32
как заставить компонент Shape двигаться по ступенькам Ogurez Помощь студентам 1 31.10.2010 11:07
Как вывести название папок из указанной папки? zotox Помощь студентам 1 01.05.2009 14:37
Как двигаться по данным после select? _ozzy_ SQL, базы данных 5 30.06.2008 09:33
Как двигаться по записям после Select? _ozzy_ БД в Delphi 5 17.06.2008 15:53