how to read a keypress AND a mouseclick?

BlitzPlus Forums/BlitzPlus Programming/how to read a keypress AND a mouseclick?

CS_TBL(Posted 2003) [#1]
apparently in this code, I can't rightclick the canvas while holding down the left ctrl key. Do I have to use $101 here too? (since $101 and $203 have their own EventData()) Do I miss something? :) any suggestions?

app=CreateWindow("bla",100,100,256,256)

canvas=CreateCanvas(32,32,64,64,app)

; left ctrl= 29

Repeat

	WaitEvent()
	
	If EventSource()=app
		If EventID()=$803 Exit
	EndIf
	
	If EventID()=$101 ; esc
		If EventData()=1 Exit
	EndIf
	
	If EventSource()=canvas
		If EventID()=$201 ; leftmousedown
			If EventData()=1 Exit
		EndIf
	EndIf

	If EventSource()=canvas
		If EventID()=$201 And KeyDown(29); rightmousedown + left ctrl (?)   <-  uh??
			If EventData()=3 Exit
		EndIf
	EndIf
	
Forever
End



CS_TBL(Posted 2003) [#2]
Uh, lads, I'm desperately waiting on suggestions :)

Run this one, when you start it, press 'C' and you'll see it works.. now hit any button.. and then try to hit the 'C' again.. doesn't work here!

Make sure the 16th button (requestfile) works.. I tried 'activategadget app' but this doesn't give me the result I want..

app=CreateWindow("keydown test",64,64,512,256)

Global canvas=CreateCanvas(32,32,160,160,app)

Global KEY=False

; bunch o' worthless buttons
Dim b(16)
For x=0 To 3:For y=0 To 3
	b(ndx)=CreateButton(ndx,200+(x*24),32+(y*24),24,24,app)
	ndx=ndx+1
Next:Next

b(16)=CreateButton(ndx,300,32,100,32,app)
	

SetBuffer CanvasBuffer(canvas)
Repeat

	
	; some boring math here..
	i=i+1
	amp=60+Sin(i*10)*20
	x=80+Sin(i+amp)*amp:y=80+Cos(i-amp)*amp
	x=x Mod 160:y=y Mod 160
	

	t=WaitEvent(8)
	
	If t=0
		UpdatePixel(x,y)
		
	EndIf

	;ActivateGadget app ; <- this doesn't work!!

	; app close	
	If EventSource()=app
		If EventID()=$803
			Exit
		EndIf
	EndIf

	; read key	
	If EventID()=$101
		If EventData()=46
			KEY=True ; "C"
		EndIf
	EndIf
	If EventID()=$102
		If EventData()=46
			KEY=False ; "C"
		EndIf
	EndIf
	
	If EventSource()=b(16)
		crap$=RequestFile$("test","bla")
	EndIf

Forever

FreeGadget app
End

Function UpdatePixel(x,y)
	Cls
	Rect x,y,3,3
	Rect y,x,3,3
	If KEY Text 2,2,"'C'"
	FlipCanvas(canvas)
End Functionction



EOF(Posted 2003) [#3]
CS,
For the 'button clicked / keypress' problem see this post

As for LCtrl+RMB this works:
app=CreateWindow("bla",100,100,256,256)
canvas=CreateCanvas(32,32,64,64,app)

Const key_LCTRL=29
Global lctrl_flag=0

Repeat
	WaitEvent
	stat$=""
	If EventSource()=app
		If EventID()=$803 Exit
	EndIf
	If EventID()=$101 ; esc
		If EventData()=1 Exit
		lctrl_flag=(1 And EventData()=key_LCTRL)
	EndIf
	If EventID()=$102
		lctrl_flag=(0 And EventData()=key_LCTRL)
	EndIf
	If EventSource()=canvas
		If EventID()=$201 ; mouse buitton
			If EventData()=1 Exit
			If EventData()=2 ; right button
				If lctrl_flag stat$="Left Control + RMB"
			EndIf
		EndIf
	EndIf
	SetStatusText app,stat$
Forever

End