Перейти к содержанию
  • Регистрация
  • 0
m.medvedb

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

Вопрос

У меня есть еще к вам вопрос: Есть форма на ней множества 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

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

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

 

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

Поделиться сообщением


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

  • Последние посетители   0 пользователей онлайн

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

×
×
  • Создать...