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

Лидеры

Популярный контент

Показан контент с высокой репутацией 09.02.2014 в Сообщения

  1. Автор: Бровин Ярослав Тип лицензии: Open Source (MPL 2.0) Видео обзор: http://www.youtube.com/watch?v=bzEzOU3EWI4 FGX - Donate - QIWI: 4890 4941 7671 0929 Скачать: RAD Studio XE5 fgx_0.3.0.11.zip RAD Studio XE6 fgx_0.4.0.12.zip RAD Studio XE7 fgx_0.5.0.41.zip RAD Studio XE8 fgx_0.6.0.46.zip fgx_0.6.0.60.zip RAD Studio XE10 (RX) fgx_0.7.0.69.zip fgx_0.7.1.74.zip RAD Studio R101 (Berlin) fgx_0.7.1.112.zip , fgx_0.7.1.114.zip , fgx_0.7.1.118.zip fgx_0.6.0.46.zip fgx_0.6.0.60.zip fgx_0.7.0.69.zip fgx_0.7.1.74.zip
    1 балл
  2. Проще всего определить имеют ли два контрола точки пересечения или нет, используя функцию TRectF.IntersectsWith. Которая позволяет определить пересекаются ли два указанных прямоугольника или нет. Далее остается определить регионы контролов: Контролы имею общего родителя. В этом случае они лежат на одном уровне и являются дочерними объектами одного и того же родителя. А это значит, что в качестве их положения можно взять их регион в родительских координатах TControl.ParentedRect. Контролы не имеют общего родителя. В этом случае нужно воспользоваться регионом взятым в абсолютных координатах формы. То есть TControl.AbsoluteRect. Весь код функции определения пересечения двух контролов представлена ниже: function IsControlIntersected(const AControl1: TControl; const AControl2: TControl): Boolean; var ControlRect1: TRectF; ControlRect2: TRectF; begin Assert(AControl1 <> nil); Assert(AControl2 <> nil); if AControl1.Parent = AControl2.Parent then begin ControlRect1 := AControl1.ParentedRect; ControlRect2 := AControl2.ParentedRect; end else begin ControlRect1 := AControl1.AbsoluteRect; ControlRect2 := AControl2.AbsoluteRect; end; Result := ControlRect1.IntersectsWith(ControlRect2); end; P.S. Мы могли бы всегда вычислять пересечение путем взятия абсолютного положения контролов. Однако, получение абсолютного положения контрола через AbsoluteRect выполняет дополнительные действия по конвертации координат (с учетом матрицы преобразования), что при очень частом использовании может быть не выгодным. Именно по этому правильнее будет использование абсолютных координат только в том, случае, когда это действительно необходимо. Именно по этому код функции IsControlIntersected имеет в себе два подхода.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...