MaxGUI help. (i'm clueless)
BlitzMax Forums/MaxGUI Module/MaxGUI help. (i'm clueless)
| ||
Im stuck on the MaxGUI module and do not know how to get something to happen after a button is clicked on. I understand this much:Import maxgui.drivers
Graphics 800,600
Global mywindow:TGadget=CreateWindow("My New Window",0,0,400,300,Null,WINDOW_DEFAULT)
Global mybutton:TGadget=CreateButton("Click Me",0,0,100,25,mywindow,BUTTON_PUSH)
Global myradio:TGadget=CreateButton("Radio",200,0,100,25,mywindow,BUTTON_RADIO)
Global myok:TGadget=CreateButton("OK",0,30,100,25,mywindow,BUTTON_OK)
Repeat
Flip
Until AppTerminate()Where is a good resource for learning about the MaxGUI? |
| ||
| There some good MaxGUI tutorials here - http://www.blitzbasic.com/Community/posts.php?topic=54579 |
| ||
You need a complete "Event-Handler" which manage the Events the GUI is reporting. Here is a (non working) example of the basic elements you will need:Import MaxGUI.Drivers
Global Window:TGadget , Canvas:TGadget, text:Tgadget
CreateMyWindow()
CreateTimer 60
While WaitEvent()
Local tmpGadget:TGadget
Global MausX%, MausY%
Select EventID()
Case EVENT_TIMERTICK
MyMainLoop
RedrawGadget canvas
Case EVENT_GADGETPAINT
Local Fenster:TGraphics=CanvasGraphics(canvas)
SetGraphics Fenster
SetClsColor 255,255,255
SetColor 255,0,0
'Cls
DrawOval MausX,MausY,5,5
Flip
Case EVENT_WINDOWCLOSE
ProgrammEnde
Case EVENT_APPTERMINATE
ProgrammEnde
Case EVENT_MENUACTION
Case EVENT_MOUSEDOWN
tmpGadget = TGadget(EventSource())
If tmpGadget=Canvas
Print "maus " + mausx + " " + mausy
EndIf
Case EVENT_MOUSEMOVE
tmpGadget= TGadget(EventSource())
If tmpGadget=Canvas
MausX=EventX()
MausY=EventY()
EndIf
Case EVENT_GADGETACTION
If AktivesFenster()=Window Then
Event EventSource()
Else
EndIf
Case EVENT_KEYDOWN
ScanTasten EventData(),1
PrintOut "KKeydown" + EventData()
Case EVENT_KEYUP
ScanTasten EventID(),0
End Select
Wend
ProgrammEnde
Function ProgrammEnde()
End
End Function
Function MyMainLoop()
End Function
Function CreateMyWindow()
Local flags%=WINDOW_TITLEBAR | WINDOW_CLIENTCOORDS|WINDOW_CENTER
Window= CreateWindow("Window with Canvas" , 0 , 0 , 600 , 400 , Null , Flags%)
Canvas=CreateCanvas(5 , 95 , 400, 300 , Window)
Text=CreateTextField(40,40,200,40,window)
'ExitButton=CreateButtton(...)
SetGadgetText text,"123456789!"
Select text,1
End Function
Function Event (EventQuelle:Object)
Local i%
Local tmpGadget:TGadget = TGadget(EventQuelle)
If tmpGadget
If (GadgetClass(tmpGadget) =GADGET_TOOLBAR)
PrintOut "switch toolbar " + EventData()
Select EventData()
'Case TOOL_EXIT
'Case ....
End Select
ElseIf (GadgetClass(tmpGadget) =GADGET_BUTTON)
PrintOut "Event Button-Click " + GadgetText(tmpGadget)
Select tmpGadget
' Case ExitButton
' Case .....
End Select
EndIf
Endif
End Function
Function AktivesFenster:TGadget()
Local tmpGadget:TGadget = ActiveGadget()
While tmpGadget And GadgetClass(tmpGadget) <> GADGET_WINDOW
tmpGadget = GadgetGroup(tmpGadget)
Wend
Return tmpGadget
End Function
I wrote it on the fly without testing it, but it shows the way.... |
| ||
| Thanks to the both of you! :) Midimaster, very nice code structure there. :) |
| ||
| Why doesn't the sphere show up in this? I DO NOT CLAIM THIS CODE AS MY OWN AND AM USING IT ONLY FOR PRACTICE Last edited 2012 |
| ||
| I don't have minib3d installed so can't test this, but: remove UpdateWorld, RenderWorld and Flip from the Repeat Forever loop, it does not belong there. Try to have only one Flip, which is already correct in the UpdateCanvas. Put your UpdateWorld and Renderworld in a separate function. Then add a timer like in the example Midimaster posted above and call the UpdateCanvas to display whatever you need. |
| ||
You have to prepare some things before combining MaxGui and MiniB3D. There is a sample coming with the MiniB3D source. Here is a reduced minimum of this code:' Based on code by Birdie and Peter Scheutz
Import sidesign.minib3d
Import maxgui.drivers
Strict
SetGraphicsDriver GLGraphicsDriver(),GRAPHICS_BACKBUFFER|GRAPHICS_DEPTHBUFFER
Local win:TGadget=CreateWindow("MiniB3D in a GUI window", 10, 10, 512, 512 )
Local can:TGadget=CreateCanvas(0,0,ClientWidth(win),ClientHeight(win),win,0)
SetGadgetLayout can,1,1,1,1
TGlobal.width=ClientWidth(win)
TGlobal.height=ClientHeight(win)
TGlobal.depth=16
TGlobal.mode=0
TGlobal.rate=60
SetGraphics CanvasGraphics(can)
TGlobal.GraphicsInit()
Local cam:TCamera=CreateCamera()
PositionEntity cam,0,0,-10
Local light:TLight=CreateLight(1)
Local cube:TMesh=CreateCube()
'PositionEntity cube,-6,0,0
CreateTimer( 60 )
While True
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
End
Case EVENT_WINDOWSIZE
TGlobal.width=ClientWidth(win)
TGlobal.height=ClientHeight(win)
cam.CameraViewport(0,0,ClientWidth(win),ClientHeight(win))
Case EVENT_TIMERTICK
RedrawGadget can
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics(can)
TurnEntity cube,0,1,0
RenderWorld
Flip
EndSelect
Wend
|
| ||
| :D |