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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 03:52   #1
artem_degtev
Новичок
Джуниор
 
Регистрация: 04.11.2011
Сообщений: 2
По умолчанию как сделать что бы объект не выходил за пределы формы

Есть объект который передвигается по форме с помощью нажатий клавиш (стрелочек). Подскажите как сделать так, что бы когда объект доходил до края формы, прекращал свое движение.


Вот код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg;

type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Image6: TImage;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);

private
{ Private declarations }
public
{ Public declarations }
end;
const


var
Form1: TForm1;

implementation

{$R *.dfm}

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

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

if Key=VK_UP then
begin
image1.Visible:=false;
image2.Visible:=false;
image4.Visible:=false;
image3.Visible:=true;
image1.Top:=image1.Top-10;
image2.Top:=image2.Top-10;
image3.Top:=image1.Top-10;
image4.Top:=image4.Top-10;
if x<=0 then key:=vk_space;
end;

if Key=VK_DOWN then
begin
image1.Visible:=false;
image3.Visible:=false;
image2.Visible:=false;
image4.Visible:=true;
image1.Top:=image1.Top+10;
image2.Top:=image2.Top+10;
image3.Top:=image1.Top+10;
image4.Top:=image4.Top+10;

end;
if Key=VK_LEFT then
begin
image1.Visible:=false;;
image2.Visible:=true;
image3.Visible:=false;
image4.Visible:=false;
image1.Left:=image1.Left-10;
image2.Left:=image2.Left-10;
image3.Left:=image3.Left-10;
image4.Left:=image4.Left-10;
end;
if Key=VK_RIGHT then
begin
image1.Visible:=true;
image2.Visible:=false;
image3.Visible:=false;
image4.Visible:=false;
image1.Left:=image1.Left+10;
image2.Left:=image2.Left+10;
image3.Left:=image3.Left+10;
image4.Left:=image4.Left+10;

end;
end;



end.
artem_degtev вне форума Ответить с цитированием
Старый 17.12.2011, 04:27   #2
Felian
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 24
По умолчанию

У формы и у объекта есть свойства Width и Height. Это ширина и высота. Свойства Top и Left объекта - это координаты верхнего левого угла объекта относительно верхнего левого угла контейнера, на котором он находится. Top - сверху вниз, Left - слева направо.
Если двигаем объект вверх, проверять что бы новый Top объекта был >= 0, иначе не двигаем.
Если двигаем объект вниз, проверять что бы новый Top объекта был <= (Height формы - Height объекта). Иначе не двигаем.
Если двигаем объект влево, проверять что бы новый Left объекта был >= 0, иначе не двигаем.
Если двигаем объект вправо, проверять что бы новый Left объекта был <= (Width формы - Width объекта). Иначе не двигаем.

С реализацией проблем не будет?
Felian вне форума Ответить с цитированием
Старый 17.12.2011, 15:44   #3
artem_degtev
Новичок
Джуниор
 
Регистрация: 04.11.2011
Сообщений: 2
По умолчанию

Не получилось сделать. Можешь привести пример кода хотя бы для перемещения одного image/
artem_degtev вне форума Ответить с цитированием
Старый 18.12.2011, 00:11   #4
Felian
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 24
По умолчанию

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
  if Key=VK_UP then
  begin
    if image1.top-10 >= 0 then
      image1.Top := image1.Top-10;
  end;

  if Key=VK_DOWN then
  begin
    if image1.top+10 <= form1.height-image1.height then
      image1.Top:=image1.Top+10;
  end;

  if Key=VK_LEFT then
  begin
    if image1.left-10 >= 0 then
      image1.Left := image1.Left-10;
  end;
 
  if Key=VK_RIGHT then
  begin
    if image1.left+10 <= form1.width-image1.width then
      image1.Left:=image1.Left+10;
  end;
end;
// если ответ устраивает, добавьте + в репутацию
это для Image1. вместо перемещения по 10 пикселов, можешь таскать по 1

Последний раз редактировалось Felian; 18.12.2011 в 00:14.
Felian вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как получить объект формы по сендеру maloun Общие вопросы Delphi 13 07.07.2011 12:43
Обьект невозможно переместить за пределы листа. Что это такое? kzld Microsoft Office Excel 5 02.11.2010 10:41
Splitter & VertScrollBar. Перетаскивание за пределы формы. HIC Общие вопросы Delphi 2 31.08.2010 14:58
Чтобы приложение не уходило за пределы моей формы Marsel737 Общие вопросы Delphi 24 28.01.2010 09:56
Как сделать границы формы другого цвета,формы?? Дима я Общие вопросы Delphi 3 22.06.2009 07:24