MaxGUI KEYDOWN events
BlitzMax Forums/BlitzMax Programming/MaxGUI KEYDOWN events
| ||
| Can anyone point me to a good example of using KEYDOWN events in MaxGUI (since the KEYDOWN events used under the GRAPHICS command don't work under MaxGUI). I just need to get my arrow keys working again, and the docs are poor in the 'events' area. Thanks, -dak |
| ||
' createcanvas.bmx
Strict
Global GAME_WIDTH=320
Global GAME_HEIGHT=240
' create a centered window with client size GAME_WIDTH,GAME_HEIGHT
Local wx=(GadgetWidth(Desktop())-GAME_WIDTH)/2
Local wy=(GadgetHeight(Desktop())-GAME_HEIGHT)/2
Local window:TGadget=CreateWindow("My Canvas",wx,wy,GAME_WIDTH,GAME_HEIGHT,0,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS)
' create a canvas for our game
Local canvas:TGadget=CreateCanvas(0,0,320,240,window)
' create an update timer
CreateTimer 60
While WaitEvent()
Select EventID()
Case EVENT_TIMERTICK
RedrawGadget canvas
Case EVENT_GADGETPAINT
Local g=CanvasGraphics(canvas)
SetGraphics g
SetOrigin 160,120
SetLineWidth 5
Cls
Local t=MilliSecs()
DrawLine 0,0,120*Cos(t),120*Sin(t)
DrawLine 0,0,80*Cos(t/60),80*Sin(t/60)
Flip
Case EVENT_WINDOWCLOSE
FreeGadget canvas
End
Case EVENT_KEYDOWN
Select EventData()
Case KEY_SPACE
Print "Space down"
End Select
Case EVENT_APPTERMINATE
End
End Select
Wend
|
| ||
| Thanks for the code sample, but it still doesn't work. The [Case EVENT_KEYDOWN] never executes. I added another print statement to check it. Case EVENT_KEYDOWN Print "keydown" Select EventData() Case KEY_SPACE Print "Space down" End Select |
| ||
| Found it! you have to use [ActivateGadget canvas] to set the focus to the canvas gadget (or click on the canvas) in order for the EVENT_KEYDOWN to respond. |
| ||
| That one took me a while to figure out too. I wouldn't mind canvases activating by default on creation myself... |
| ||
| This *so* needs mentioning in the docs... |
| ||
| from the CreateCanvas docs: When a Canvas is active using either the ActivateGadget command or clicking on the Canvas when the application is running, the following event's will also be sent from the Canvas: |
| ||
| yeah, but the implications of that statement could be put a wee bit clearer, initialy it doesnt look like any gadget is active by default which is whats catching ppl out... |
| ||
| I'm still lost. Why doesn't keydown and keyhit works. For me only the mouse doesn't work in debug mode. Yet I'll rather use a MaxGUI window for debug, or is it the same? So to make a quick replace for Keyhit/KeyDown Function KeyDown() If EventID() = EVENT_KEYDOWN 'EVENT_KEYHIT return EventData() Endif Endfunction Is that right? Or am I missing something? |
| ||
| you could do that, I've written apps in c++ using the windows api and tabbing and key capture can be an absolute nightmare. I have every confidence that maxgui will evolve over time. Have you checked out the mouse over etc events? |
| ||
| So the mouse is separate now? Before I used Keyhit(MOUSE_LEFT), So now I should use Event_MouseDown? |