Перейти к содержанию
Fire Monkey от А до Я
  • 0

Вопрос как в RunTime при движение компонентов запретить заход одного за другой?


m.medvedb

Вопрос

У меня есть еще к вам вопрос: Есть форма на ней множества TCornerButton, используются как красивые дисплеи для отображения данных. Вопрос как при передвижение компонентов запретить заход одного за другой? Их около 30ти в каждом проверять каждый не вариант.

 

Движение компонентов произвожу по вашему примеру: Как сделать перемещение контрола мышкой/пальцем?

 

Еще добавил в код на событие OnMouseMove проверку от захода компонента за форму.

  If DraggableImage.Position.X < 0 Then
     DraggableImage.Position.X := 0 Else
  If (DraggableImage.Position.X + DraggableImage.Width) > Form4.ClientWidth Then
     DraggableImage.Position.x := Form4.ClientWidth - DraggableImage.Width;
  If DraggableImage.Position.y < 0 Then
     DraggableImage.Position.y :=0;
  If (DraggableImage.Position.y + DraggableImage.Height) > Form4.ClientHeight Then
     DraggableImage.Position.y := Form4.ClientHeight - DraggableImage.Height;
Изменено пользователем admin
Отформатирован текст.
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы
  1. Надо при перемещении одного контрола проверять пересечение с остальными. Другого способа нет.
  2. Проверять в каждом не нужно. Достаточно проверить только перемещаемый контрол со всеми остальными. 
  3. Определение пересечения двух контролов лучше делать по описанным мною способом: Как определить пересекаются ли два контрола или нет?
  4. Определение пересечения контрола с границей формы, проще сделать другим способом. Берем у контрола абсолютные координаты его позиции AbsoluteRect, а затем просто проверяем вхождение региона контрола в регион формы. Если форма полностью содержит контрол, значит он не пересекает границу, иначе - пересекает или полностью вне границы.
Form1.ClientRect.Contains(Control1.AbsoluteRect)
Ссылка на комментарий
  • 0
  • Администраторы

Ну прям нет слов. Спасибо огромное за ваш труд!

Все работает как часики!

 

Не за что, обращайтесь.

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...