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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 13:51   #1
SnJon
 
Регистрация: 15.12.2011
Сообщений: 5
По умолчанию Сталкивание Image

Имеется 2 объекта на форме (Image), которые можно свободно перемещать по форме, нажав на них мышкой.
Вопрос - Как сделать, чтобы объекты сталкивались друг с другом?

В этой теме нашел прилипание к верхнему и левому краю.

На примере Image:

Код:
if image3.Top+image3.Height+1>image2.Top then
image3.Top:=image2.Top-image3.Height-1;//прилипание к верхнему краю 

    if image3.left+image3.width+1>image2.left then
image3.left:=image2.left-image3.width-1;  //прилипание к левому краю
Как сделать сталкивание с нижним и правым краем?

Заранее благодарен
SnJon вне форума Ответить с цитированием
Старый 27.12.2011, 23:35   #2
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Код:
Как сделать сталкивание с нижним и правым краем?
Нижний и правый край в дельфи отсутствует, тебе нада вести отсчёт именно от верхнего и левого края, по другому никак
bulldog5293 вне форума Ответить с цитированием
Старый 27.12.2011, 23:37   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Нижний и правый край в дельфи отсутствует, тебе нада вести отсчёт именно от верхнего и левого края, по другому никак
да ну?
и получить координаты нижнего и верхнего края мы не можем никак?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.12.2011, 07:28   #4
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

примерно так
Код:
 if image3.left+image3.width+1>image2.left then
image3.Left:=image2.Width+image3.Width+(image3.Width div 4)-1;
if image3.Top+image3.Height+1>image2.Top then
image3.Top:=image2.Height+image3.Height+(image3.Height div 6)+1;
Если бы мне это нужно было я бы лучше написал
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 29.12.2011, 11:29   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Код контроля столкновении или когда край на другом объекте.
Вдруг пригодится кому нибудь этот код.
Код:
function CheckCollision(r, r2: TRect): boolean;
begin
result := (r.Top >= r2.Top) and (r.Top <= r2.Bottom) and
(r.Left >= r2.Left) and (r.Left <= r2.Right) or
(r.Top >= r2.Top) and (r.Top <= r2.Bottom) and
(r.Right >= r2.Left) and (r.Right <= r2.Right) or
(r.Bottom >= r2.Top) and (r.Bottom <= r2.Bottom) and
(r.Left >= r2.Left) and (r.Left <= r2.Right) or
(r.Bottom >= r2.Top) and (r.Bottom <= r2.Bottom) and
(r.Right >= r2.Left) and (r.Right <= r2.Right);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if CheckCollision(Image1.BoundsRect, Image2.BoundsRect)then
Caption:= 'Объект сталкнулся'
else
Caption:= '';
end;

Последний раз редактировалось Aliens_wolfs; 29.12.2011 в 13:08.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
EPNGMissingMultipleIDAT. This PNG Image is invalid because it has missing image parts kardinal94 Общие вопросы Delphi 0 08.10.2010 20:31
Image одной формы = Image другой формы DimR Microsoft Office Excel 2 21.04.2010 23:08
DelphiX не сталкивание объектов Virus191288 Gamedev - cоздание игр: Unity, OpenGL, DirectX 16 04.02.2010 16:29
Вопрос по Image (скачанная картинка не хочет выводиться в Image) Radnor Мультимедиа в Delphi 2 06.07.2009 02:20
image Черничный Общие вопросы Delphi 2 25.06.2008 16:09