Hoffe es hilft jemanden, ist wie gesagt leicht dilettantisch, würde heute einiges anders machen... Zumal es bisher nur Buttons hat...
Code: Alles auswählen
InitSprite()
InitMouse()
OpenWindow(0,0,0,300,300,"Menue Tests")
OpenWindowedScreen(WindowID(0), 0, 0, 300, 300, 1,0,0)
LoadFont(1, "Console", 7)
Prototype MenueClick_functionPointer()
Structure callStruct
id.l
callMe.MenueClick_functionPointer
EndStructure
Global NewList menueClickEventList.callStruct()
Procedure MenuClick_addEvent(id, function.MenueClick_functionPointer)
ResetList(menueClickEventList())
AddElement(menueClickEventList())
menueClickEventList()\id = id
menueClickEventList()\callMe = function
EndProcedure
;(Menue Breite - Elementbreite)/2 = Zentriert
;(Menue Hoehe - ElementHoehe)/2 = Zentriert
Procedure getCenterizedPos(start, rootSize, ownSize)
ProcedureReturn start + ((rootSize - ownSize)/2)
EndProcedure
Procedure proccessLeftMouseclick(id)
ForEach menueClickEventList()
If menueClickEventList()\id = id
menueClickEventList()\callMe()
ProcedureReturn
EndIf
Next
EndProcedure
Procedure checkAndDrawElement(id,x,y,width,height,colorNonActive, colorActive = #Green,check = #False)
color.l = colorNonActive
If MouseX() > x And MouseX() < width+x And MouseY() > y And MouseY() < y+height And check
color = colorActive
If MouseButton(#PB_MouseButton_Left)
color = $990000
If id <> -1
proccessLeftMouseclick(id)
EndIf
EndIf
EndIf
Box(x,y,width,height,color)
EndProcedure
Procedure createMenuElement(id,x,y,width,height, text$)
checkAndDrawElement(id,x,y,width,height,#Red, $009900, #True)
DrawText(getCenterizedPos(x,width,TextWidth(text$)),getCenterizedPos(y,height,TextHeight(text$)), text$, #White)
EndProcedure
Procedure doEntry1()
;Da die Oberfunktion innerhalb eines Start/StopDraw ist können wir zeichnen
;-- Dirty...
DrawText(0,0,"Entry 1 clicked!", RGB(255,255,255))
EndProcedure
Procedure doEntry2()
DrawText(0,0,"Entry 2 clicked!", RGB(255,255,255))
EndProcedure
Procedure doEntry3()
DrawText(0,0,"Entry 3 clicked!", RGB(255,255,255))
EndProcedure
Procedure doEntry4()
DrawText(0,0,"Entry 4 clicked!", RGB(255,255,255))
EndProcedure
Procedure doEntry5()
DrawText(0,0,"Entry 5 clicked!", RGB(255,255,255))
EndProcedure
Procedure doEntry6()
DrawText(0,0,"Entry 6 clicked!", RGB(255,255,255))
EndProcedure
Procedure doEntry7()
DrawText(0,0,"Entry 7 clicked!", RGB(255,255,255))
EndProcedure
MenuClick_addEvent(0, @doEntry1())
MenuClick_addEvent(1, @doEntry2())
MenuClick_addEvent(2, @doEntry3())
MenuClick_addEvent(3, @doEntry4())
MenuClick_addEvent(4, @doEntry5())
MenuClick_addEvent(5, @doEntry6())
MenuClick_addEvent(6, @doEntry7())
released = #False
MenueX = 50;
MenueY = 50;
drag = #False
collapsed = #False
Repeat
ExamineMouse()
event.l = WindowEvent()
ClearScreen($000000)
If WindowMouseX(0) < 1 Or WindowMouseX(0) > 298 Or WindowMouseY(0) < 1 Or WindowMouseY(0) > 298
ReleaseMouse(#True)
released = #True
ElseIf released = #True
released = #False
ReleaseMouse(#False)
MouseLocate(WindowMouseX(0), WindowMouseY(0))
EndIf
;draw menue base
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
;Main Menue Frame
checkAndDrawElement(-1,MenueX,MenueY-10,200,10,#Yellow)
If MouseX() >= MenueX And MouseX() < MenueX + 200 And MouseY() < MenueY And MouseY() > MenueY -10
If MouseButton(#PB_MouseButton_Left)
drag = #True
EndIf
If MouseButton(#PB_MouseButton_Right)
If collapsed
collapsed = #False
Else
collapsed = #True
EndIf
; Dirty one...
While(MouseButton(#PB_MouseButton_Right)) : ExamineMouse() : Delay(1) : Wend
EndIf
EndIf
If drag
If MouseButton(#PB_MouseButton_Left)
MenueX = MenueX + MouseDeltaX()
MenueY = MenueY + MouseDeltaY()
Else
drag = #False;
EndIf
EndIf
If Not collapsed
checkAndDrawElement(-1,MenueX,MenueY,200,200,RGB(127,127,127))
checkAndDrawElement(-1,MenueX+1,MenueY+1,198,198,RGB(0,0,0))
createMenuElement(0,MenueX+3,MenueY+3,195,25,"Entry 1")
createMenuElement(1,MenueX+3,MenueY+3+26*1,195,25,"Entry 2")
createMenuElement(2,MenueX+3,MenueY+3+26*2,195,25,"Entry 3")
createMenuElement(3,MenueX+3,MenueY+3+26*3,195,25,"Entry 4")
createMenuElement(4,MenueX+3,MenueY+3+26*4,195,25,"Entry 5")
createMenuElement(5,MenueX+3,MenueY+3+26*5,195,25,"Entry 6")
createMenuElement(6,MenueX+3,MenueY+3+26*6,195,25,"Entry 7")
DrawingFont(FontID(1))
temp$ = "Coded by Blackskyliner"
DrawText(getCenterizedPos(MenueX+3,195,TextWidth(temp$)),MenueY+3+26*7, temp$, RGB(255,255,255))
EndIf
;Draw our mouse
Box(MouseX(),MouseY(),5,1,RGB(255,255,255))
Box(MouseX(),MouseY(),1,5,RGB(255,255,255))
LineXY(MouseX(),MouseY(),MouseX()+5,MouseY()+5, RGB(255,255,255))
StopDrawing()
If event = #PB_Event_CloseWindow
Break
EndIf
FlipBuffers()
Delay(5)
ForEver