WM_Keydown et CallBack

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

WM_Keydown et CallBack

Message 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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: WM_Keydown et CallBack

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Re: WM_Keydown et CallBack

Message 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
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Re: WM_Keydown et CallBack

Message 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
Répondre