Страница: 1 |
Вопрос: ОБЪЕКТЫ 1 | Добавлено: 02.12.05 20:57 |
Автор вопроса: ![]() |
ПРЕДИСЛОВИЕ.
Всем известно, что "координирование"(место на форме или панели)объекта ведется в левом верхнем углу. ВОПРОС. Как узнать зализает ли объект на друго объект??? P.S. Можно сравнивать х;у первого и х;у второго, а потом прописывать все углы и т.п. Допустим х-15;у первого и х;у второго и т.д и т.п.!!! --- ???МОЖЕТ ВЫ ЗНАЕТЕ ДРУГОЙ СПОСОБ??? |
Ответы | Всего ответов: 8 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #1 | Добавлено: 02.12.05 22:31 |
Function F(A As Object, B As Object) As Boolean
If B.Left < A.Left + A.Width And A.Left < B.Left + B.Width _ And B.Top < A.Top + A.Height And _ A.Top < B.Top + B.Height Then F = True Else F = False End If End Function |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 224 Ответов: 3777 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 02.12.05 22:44 |
есть апи которая расчитывает результат пересечения двух прямоугольников. так вот если она там не помню где ноль вернёт то прямоугольники не пересекаются. короче это хорошо для обработки столкновений в играх. если это то что надо - я попробую вспомнить чё за функция - или пусть тут кто напишетю |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 27 |
Профиль | Цитата | #3 | Добавлено: 03.12.05 01:00 |
Declare Function CreateRectRgn Lib "gdi32" Alias "CreateRectRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function CombineRgn Lib "gdi32" Alias "CombineRgn" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Const RGN_AND = 1 Const RGN_COPY = 5 Const RGN_OR = 2 Const RGN_XOR = 3 Const RGN_DIFF = 4 Dim rgn1 as long,rgn2 as long,rgn3 as long rgn1 = CreateRectRgn(0,0,20,30) rgn1 = CreateRectRgn(15,35,50,80) rgn3 = CombineRgn(rgn3,rgn1,rgn2,XXXXXXX) А вот тут я не помню, какой параметр. Помойму XXXXXXX = RGN_AND. И если вернется 0, то регионы не пересекаются, т.е. If rgn3 <> 0 then 'делаешь все что нужно end if |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 224 Ответов: 3777 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 03.12.05 01:39 |
Нет, я имел ввиду IntersectRect
Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 27 |
Профиль | Цитата | #5 | Добавлено: 03.12.05 09:34 |
Да, но эти тоже работают. Если регионы не пересекаются, то по свойству AND регион получим 0, т.к. не будет одинаковых точек. Хотя, в принципе без разницы, лиш бы работало! |
Номер ответа: 6 Автор ответа: ![]() ![]() Вопросов: 8 Ответов: 13 |
Профиль | Цитата | #6 | Добавлено: 03.12.05 12:40 |
Morpheus
ТОТ-ТОТ, что мне надо!!! |
Номер ответа: 7 Автор ответа: ![]() ![]() Вопросов: 8 Ответов: 13 |
Профиль | Цитата | #7 | Добавлено: 03.12.05 12:43 |
Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
Пожалуйста поподробней!!! --- GreatLion Какая переменная или что будет равно 0?! |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 27 |
Профиль | Цитата | #8 | Добавлено: 03.12.05 23:26 |
Полученый регион.
Я там малость напортачил. Вот новый код. Из старого возьми объявление АПИ: Dim rgn1 As Long, rgn2 As Long, rgn3 As Long, r As Long rgn1 = CreateRectRgn(0, 0, 30, 30) rgn2 = CreateRectRgn(20, 20, 80, 80) rgn3 = CreateRectRgn(0, 0, 1, 1) r = CombineRgn(rgn3, rgn1, rgn2, 1) И если r - 1, то регионы не пересекаются, если 2, то пересекаются. Лучше делай так: Если регионы не пересекаются, т.е. r<>1 и пиши код: If r <> 1 then msgbox "Регионы пересеклись." end if Когда создаешь регионы, то x1 , y1 - координаты левого верхнего угла; а x2 , y2 - это координаты правого нижнего угла. В ПИКСЕЛЯХ. Не забудь! |
Страница: 1 |
|