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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 11:39   #1
glebast
Форумчанин
 
Аватар для glebast
 
Регистрация: 10.12.2011
Сообщений: 154
Восклицание Работа с image

Здравствуйте.
Помогите мне плиз, а то совсем уж все навыки иссякли.
Мне нужно чтоб маленькая картинка НЕ проходила сквозь большую, т.е. как только границы двух картинок соприкоснуться маленькая картинка дальше ехать не могла.
Заранее спасибо.
Вложения
Тип файла: rar Новая папка (2).rar (501.5 Кб, 13 просмотров)
glebast вне форума Ответить с цитированием
Старый 07.06.2012, 14:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так пойдёт?

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  NewImage2, tmp : TRect;
begin
  NewImage2 := image2.BoundsRect;
  if (key=vk_left) and (NewImage2.Left>0) then NewImage2.Left:= NewImage2.Left-5;
  if (key=vk_right) and (NewImage2.Left<form1.ClientWidth-Image2.Width) then NewImage2.Left:=NewImage2.Left+5;
  if (key=vk_up) and (NewImage2.top>0) then NewImage2.top:=NewImage2.top-5;
  if (key=vk_down) and (NewImage2.top<form1.ClientHeight-Image2.Height) then NewImage2.top:=NewImage2.top+5;
  NewImage2.Right := NewImage2.Left + Image2.Width;
  NewImage2.Bottom := NewImage2.Top + Image2.Height;
  if not IntersectRect(tmp, NewImage2, Image1.BoundsRect )
       then
         image2.BoundsRect := NewImage2;
end;

p.s. Image2 останавливается, если следующий шаг уже приводит к наезду на картинку 1. т.к. шаг у Вас равен 5, то может остановится в диапазоне от 0 до 4 пикселей
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2012, 15:41   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Serge_Bliznykov, попробовал так (чуть до-другому, ваш способ лучше):
Код:
function intersection(x,y:integer;r1,r2:trect):boolean;
var
r0:trect;
begin
  r1.Left:=r1.left+x;
  r1.Top:=r1.Top+y;
  result:=not IntersectRect(r0,r1,r2);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (key=vk_left) and (image2.Left>0) and intersection(-5,0,image2.BoundsRect,image1.BoundsRect) then image2.Left:=image2.Left-5;
if (key=vk_right) and (image2.Left<form1.ClientWidth-image2.Width)and intersection(5,0,image2.BoundsRect,image1.BoundsRect) then image2.Left:=image2.Left+5;
if (key=vk_up) and (image2.top>0)and intersection(0,-5,image2.BoundsRect,image1.BoundsRect) then image2.top:=image2.top-5;
if (key=vk_down) and (image2.top<form1.ClientHeight-image2.Height)and intersection(0,5,image2.BoundsRect,image1.BoundsRect) then image2.top:=image2.top+5;
end;
Не работает. Делает лишнее движение. Не пойму, почему.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Image (Delphi) LilliPut Помощь студентам 0 25.11.2011 23:58
Работа с Image Claster Помощь студентам 2 01.07.2011 21:02
Работа с компонентом Image. DarkStyle Помощь студентам 1 06.03.2010 22:29
работа с image messi013 Общие вопросы Delphi 4 14.01.2010 16:14
работа с image Lokos Компоненты Delphi 6 28.12.2009 18:05