Страница: 1 |
Страница: 1 |
Вопрос: ОБЪЕКТЫ 1
Добавлено: 02.12.05 20:57
Автор вопроса: B@r@nOFF
ПРЕДИСЛОВИЕ.
Всем известно, что "координирование"(место на форме или панели)объекта ведется в левом верхнем углу.
ВОПРОС.
Как узнать зализает ли объект на друго объект???
P.S.
Можно сравнивать х;у первого и х;у второго, а потом прописывать все углы и т.п. Допустим х-15;у первого и х;у второго и т.д и т.п.!!!
---
???МОЖЕТ ВЫ ЗНАЕТЕ ДРУГОЙ СПОСОБ???
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 02.12.05 22:31
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
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #2
Добавлено: 02.12.05 22:44
есть апи которая расчитывает результат пересечения двух прямоугольников. так вот если она там не помню где ноль вернёт то прямоугольники не пересекаются. короче это хорошо для обработки столкновений в играх. если это то что надо - я попробую вспомнить чё за функция - или пусть тут кто напишетю
Номер ответа: 3
Автор ответа:
GreatLion
Вопросов: 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
Автор ответа:
Morpheus
Вопросов: 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
Автор ответа:
GreatLion
Вопросов: 2
Ответов: 27
Профиль | | #5
Добавлено: 03.12.05 09:34
Да, но эти тоже работают. Если регионы не пересекаются, то по свойству AND регион получим 0, т.к. не будет одинаковых точек. Хотя, в принципе без разницы, лиш бы работало!
Номер ответа: 6
Автор ответа:
B@r@nOFF
Вопросов: 8
Ответов: 13
Профиль | | #6
Добавлено: 03.12.05 12:40
Morpheus
ТОТ-ТОТ, что мне надо!!!
Номер ответа: 7
Автор ответа:
B@r@nOFF
Вопросов: 8
Ответов: 13
Профиль | | #7
Добавлено: 03.12.05 12:43
Пожалуйста поподробней!!!
---
GreatLion
Какая переменная или что будет равно 0?!
Номер ответа: 8
Автор ответа:
GreatLion
Вопросов: 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 - это координаты правого нижнего угла.
В ПИКСЕЛЯХ. Не забудь!