Показать сообщение отдельно
Старый 28.10.2007, 22:04   #1
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Вопрос В какой объект ткнули

Незнаю, поймете ли вы меня... В общем над этой проблемой уже целый день мучаюсь...

Имеется объекты Окно1 и Окно2. Они оба находятся в одном листе. Выполнчет обновление по очереди - ОкноN .


Нужно узнать, куда ткнули. То есть, в какой объект именно.


Проблема в том, что постоянно получается, что ткнули по объекту не тому. То есть, если у нас Окно1 внизу, а Окно2 выше, но в списках по другому, а ткнули мы, допустим, как на рисунке, то получается, что выбрано Окно1, а не Окно2. Хотя оно выше. То есть мы выбрали объект через другой (визуально).

Так же все объкты имеют переменную Z. Окно1 , допустим, Z=0, а Окно2 : Z=1 . Как-то надо с этими высотами работать, и , сделать так, чтобы через верхний объект нельзя было выбрать нижний.


В общем, как-то из-за положения в списке и из-за Z у нас получается выбрать объект через объект.. как-то надо сделать ограничение, но моего ума не хватило... *даун* ...

Надеюсь ,вы меня поняли. помогите, плиз. Объясните... промучалсо весь день...
[blitz]

Global SGUIWindow:TList=New TList
Global GUI_Z = 0
Global MX, MY, MD, MH


'Главный тип
Type TGUI
Field Name$
Field X,Y
Field Width,Height

Field Text$
Field Image

Field Z
'Прорисовка

Field Visible
'0 - не рисуем
'1 - рисуем темным
'2 - Рисуем нормально

Field Number
'Группа.
Field DrapNDrop[4]

Method UpdateWindow ()

If MH=1 And MX > X And MX < X + width And MY > Y And MY < Y + Height Then GUI_Z:+1 ; Z=GUI_Z
'Таскаем окно
'Если нажали на той полоске, то записываем координаты мыши - х координата окна
If MH=1 And MX > X And MX < X + width And MY > Y And MY < Y + 25 Then
DrapNDrop[0] = MX-X
DrapNDrop[1] = MY-Y
DrapNDrop[2] = 1
End If

'Если драпдроп включен, то перемещаем.
If DrapNDrop[2] = 1
X = MX-DrapNDrop[0]
Y = MY-DrapNDrop[1]
End If

'Если не нажата, то выклчаем драпндроп
If MD=0 Then DrapNDrop[2] = 0
End Method

Method DrawWindow ()
//РИСУЕМ
End Method

Function CreateGUI_Window:TGUI (x,y,width,height,text$,name$,button,number,Visibl e )
Local GUI_Window:TGUI=New TGUI
//СОЗДАЕМ
GUI_Window.z = GUI_Z
GUI_Z:+1
ListAddLast(SGUIWindow , GUI_Window)
Return GUI_Window
End Function

End Type




TGUI.CreateGUI_Window (5,5,630,445,"Create Game","Window",0,1,1 )
TGUI.CreateGUI_Window (120,5,30,45,"Create","Window",0,2,1 )

While Not KeyDown (Key_Escape)
Cls
TileImage Image

MX = MouseX()
MY = MouseY()
MD = MouseDown(1)
MH = MouseHit(1)
Value=GetChar()

For i = 0 To GUI_Z

For GUI_Window:TGUI=EachIn SGUIWindow
If GUI_Window.Z = i Then GUI_Window.UpdateWindow ; GUI_Window.DrawWindow ()
Next

Next

Flip
Wend

[/blitz]
(Offline)
 
Ответить с цитированием