Page 1 sur 1

WM_Keydown et CallBack

Publié : jeu. 06/oct./2011 12:42
par Torp
Bonjour,

En fait, j'ai 2 questions :
1/ Je voudrais savoir pour quelle raison je ne reçois pas le message #WM_KEYDOWN lorsque je tape du texte dans le StringGadget (est ce que c'est parce que PB l'a déjà intercepter ?)
2/ Je voudrais interdire certaines lettres au StringGadget. Comment annuler l'évenement avant qu'il n'arrive au gadget ?

Merci d'avance pour vos lumières.
Bye

Code : Tout sélectionner

Procedure Callback(WindowID,message,wParam,lParam)
	
	Select message
		Case #WM_KEYDOWN
			Debug "KeyDown Callback"
	EndSelect
	ProcedureReturn #PB_ProcessPureBasicEvents
	
EndProcedure

If OpenWindow(0,0,0,250,250,"Test",#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
	StringGadget(0,25,25,200,20,"")
	
	SetWindowCallback(@Callback(), 0)
	
	Repeat
		
		Event = WaitWindowEvent()
		
		If event = #WM_KEYDOWN
			
			Debug "KeyDown: " + Chr(EventwParam() & $FFFF)
			
		EndIf
		
	Until Event = #PB_Event_CloseWindow
	
EndIf

Re: WM_Keydown et CallBack

Publié : jeu. 06/oct./2011 14:42
par falsam
je répond à une des questions :)

Code : Tout sélectionner

CaractereInterdit.s="AEIOUY"

If OpenWindow(0,0,0,250,250,"Test",#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
   StringGadget(0,25,25,200,20,"")
   
   Repeat
      
      Event = WaitWindowEvent()
      
      If event = #WM_KEYDOWN And EventGadget()=0
        If CountString(CaractereInterdit, Chr(EventwParam()))=1
          Debug "KeyDown: " + Chr(EventwParam() & $FFFF)
          keybd_event_(#VK_BACK,0,0,0)
        EndIf 
      EndIf
      
   Until Event = #PB_Event_CloseWindow
   
EndIf

Re: WM_Keydown et CallBack

Publié : jeu. 06/oct./2011 14:59
par Torp
Décidément t'es mon sauveur ces derniers temps :)

Je voulais justement éviter l'emploi de EventParam, c'est pourquoi je me posais la question du Callback.

Merci, j'ai quand même appris qq chose avec keybd_event !

Bye

Re: WM_Keydown et CallBack

Publié : jeu. 06/oct./2011 17:31
par Torp
Bon a priori, après moultes recherches, il faut attribuer un callback, non pas à la fenêtre, mais au gadget...

Code : Tout sélectionner

Global OldProc

Procedure CharCallback(hwnd, uMsg, wParam, lParam)
	If uMsg = #WM_KEYDOWN
		Debug "KeyDown Callback"
		Debug wParam ;Vk code
	EndIf
	ProcedureReturn CallWindowProc_(OldProc, hwnd, uMsg, wParam, lParam)
EndProcedure

If OpenWindow(0,0,0,250,250,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
	
	StringGadget(0,25,25,200,20,"")
	
	OldProc = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @CharCallback())

	Repeat
		
		Event = WaitWindowEvent()

	Until Event = #PB_Event_CloseWindow
	
EndIf