Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
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
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #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-сайт: xury.zx6.ru
 Профиль | | #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
Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long

Пожалуйста поподробней!!!
---
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 - это координаты правого нижнего угла.

В ПИКСЕЛЯХ. Не забудь!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам