MaxGUI KEYDOWN events

BlitzMax Forums/BlitzMax Programming/MaxGUI KEYDOWN events

wildboar(Posted 2005) [#1]
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


Perturbatio(Posted 2005) [#2]
' 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



wildboar(Posted 2005) [#3]
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


wildboar(Posted 2005) [#4]
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.


BlitzSupport(Posted 2005) [#5]
That one took me a while to figure out too. I wouldn't mind canvases activating by default on creation myself...


Chris C(Posted 2005) [#6]
This *so* needs mentioning in the docs...


skidracer(Posted 2005) [#7]
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:




Chris C(Posted 2005) [#8]
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...


Tibit(Posted 2005) [#9]
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?


Chris C(Posted 2005) [#10]
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?


Tibit(Posted 2005) [#11]
So the mouse is separate now? Before I used Keyhit(MOUSE_LEFT), So now I should use Event_MouseDown?