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?