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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2011, 20:32   #1
mihaillo
Новичок
Джуниор
 
Регистрация: 08.05.2011
Сообщений: 2
По умолчанию Движение картинки по форме при нажатии клавиши (любой)

Доброго времени суток всем! Недавно у меня появилась такая идея, даже скорее мечта, создать игру типо марио, но очень простенькую без ботов, в которой нужно ловить падающие предметы. Но вот незадача. Попал в ловушку. Обгуглил всё, но ничего ненашёл, из того, что мне нужно. Находил правда подобное, но там при нажатии мышкой на картинку, а мне нужно при нажатии клавиши.
Ближе к делу. В общем, прошу вас помочь с кодом. Я составил простенький код по перемещению картинки по координатам при нажатии стрелочки (-->). Вот собственно и сам код :

procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview:=true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Case Key of
VK_RIGHT : image1.left:=+5;
end;
end;


Но дело в том, что при нажатии данной клавиши (-->) картинка перемещается не так, как задумано, на каждые 5 пикселей, а именно на 5-ый пиксель на форме.
А мне нужно, чтобы при зажатии стрелочки вправо, картинка перемещалась вправо по координатам до стенки.
Очень прошу помоч с кодом Я подозреваю, что без компонента Timer там не обойтись
И если не сложно, еще нужен код чтоб при перемещении не только координаты менялись, но и картинка (чтобы происходила анимация)
Заранее благодарен

Последний раз редактировалось mihaillo; 08.05.2011 в 20:51.
mihaillo вне форума Ответить с цитированием
Старый 08.05.2011, 21:39   #2
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
   form1.DoubleBuffered:=true;
 KeyPreview:=true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Case Key of
 VK_RIGHT : begin image1.left:=image1.left+5;
 if (form1.ClientWidth)<=(image1.Left+image1.Width) then begin
 image1.Left:=form1.ClientWidth-image1.Width;
 end;
 end;
 VK_left : begin image1.left:=image1.left-5;
  if (image1.Left)<=0 then begin
 image1.Left:=0;
 end;
 end;
 VK_UP : begin image1.Top:=image1.Top-5;
  if (image1.Top)<=0 then begin
 image1.Top:=0;
 end;
 end;
 VK_down : begin image1.Top:=image1.Top+5;
  if (form1.ClientHeight)<=(image1.Top+image1.Height) then begin
 image1.Top:=form1.ClientHeight-image1.Height;
 end;
 end;
 end;
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 08.05.2011, 22:02   #3
mihaillo
Новичок
Джуниор
 
Регистрация: 08.05.2011
Сообщений: 2
По умолчанию

Спасибо большое! Всё работает!

Последний раз редактировалось mihaillo; 08.05.2011 в 22:06.
mihaillo вне форума Ответить с цитированием
Старый 04.03.2018, 19:18   #4
bmw7501991
Заблокирован
 
Регистрация: 28.02.2018
Сообщений: 2
По умолчанию

procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_Left:if Image2.Left>=5
then Image2.Left:=Image2.Left-5;
VK_Right:if Image2.Left+Image2.Width+5<=ClientW idth
then Image2.Left:=Image2.Left+5;
VK_Up:if Image2.Top>=5
then Image2.Top:=Image2.Top-5;
VK_Down:if Image2.Top+Image2.Height+5<=ClientH eight
then Image2.Top:=Image2.Top+5;
end;
end;
bmw7501991 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в C# прервать работу цикла при нажатии клавиши xata1988 Общие вопросы .NET 5 14.02.2011 14:48
Закрытие окна при нажатии опр. клавиши на клавиатуре. Borgond Общие вопросы Delphi 6 25.08.2010 01:14
завершение цикла при нажатии клавиши LLIyPI/IK Общие вопросы C/C++ 8 12.02.2010 13:29
Движение картинки по форме SaiLight Свободное общение 1 04.06.2009 04:28
Событие при нажатии клавиши Enter Inbox Общие вопросы Delphi 4 12.06.2007 14:18