Canvas et keyboard

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Canvas et keyboard

Message par blendman »

Salut

J'essaie de déceler le release/key_up de la touche Control sur un canvas, mais ça ne marche pas.

Sauriez-vous pourquoi ?

Merci :)

Code : Tout sélectionner

 If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 10, 10, 200, 200,#PB_Canvas_DrawFocus|#PB_Canvas_Keyboard)
    
    Repeat
      Event = WaitWindowEvent()
          
      If Event = #PB_Event_Gadget And EventGadget() = 0 
        Select EventType()
            
          Case #PB_EventType_KeyDown
            key = GetGadgetAttribute(0,#PB_Canvas_Modifiers)
            If key = #PB_Canvas_Control
              Debug "down"              
            EndIf
            
          Case #PB_EventType_KeyUp  
            key = GetGadgetAttribute(0,#PB_Canvas_Modifiers)                        
            If key = #PB_Canvas_Control
              Debug "up"             
            EndIf            
            
        EndSelect
      EndIf    
      
    Until Event = #PB_Event_CloseWindow
  EndIf
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Canvas et keyboard

Message par G-Rom »

Code : Tout sélectionner

 key = GetGadgetAttribute(0,#PB_Canvas_Modifiers | #PB_Canvas_Control)
la doc est pas très claire.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Canvas et keyboard

Message par blendman »

j'avais testé, mais ça ne marche pas sous windows :(

Du coup, j'ai du employer les grands moyens ^^.
Je teste le numéro de la touche pressée :

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 10, 10, 200, 200,#PB_Canvas_DrawFocus|#PB_Canvas_Keyboard)
   
    Repeat
      Event = WaitWindowEvent()
         
      If Event = #PB_Event_Gadget And EventGadget() = 0
        Select EventType()
           
          Case #PB_EventType_KeyDown
            key = GetGadgetAttribute(0,#PB_Canvas_Modifiers)
            If key = #PB_Canvas_Control
              Debug "down"             
            EndIf
           
          Case #PB_EventType_KeyUp 
           ; key = GetGadgetAttribute(0,#PB_Canvas_Modifiers | #PB_Canvas_Control)  
            key2= GetGadgetAttribute(0,#PB_Canvas_Key)                        
           ; If key = #PB_Canvas_Control ; IF Key = 1 ; ??
            If  key2 = 17
              Debug "up"             
            EndIf           
           
        EndSelect
      EndIf   
     
    Until Event = #PB_Event_CloseWindow
  EndIf
Est-ce un bug ou sous windows y'a-t-il une autre manipulation ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Canvas et keyboard

Message par nico »

Tu peux faire ça:

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 200, 200,#PB_Canvas_DrawFocus|#PB_Canvas_Keyboard)
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget And EventGadget() = 0 
      Select EventType()
          
        Case #PB_EventType_KeyDown
          key = GetGadgetAttribute(0,#PB_Canvas_Key)
          If key = #VK_CONTROL
            Debug "down"              
          EndIf
          
        Case #PB_EventType_KeyUp
          key = GetGadgetAttribute(0,#PB_Canvas_Key)                        
          If key = #VK_CONTROL
            Debug "up"             
          EndIf            
          
      EndSelect
    EndIf    
    
  Until Event = #PB_Event_CloseWindow
EndIf
Dernière modification par nico le dim. 08/sept./2013 10:28, modifié 2 fois.
Demivec
Messages : 91
Inscription : sam. 18/sept./2010 18:13

Re: Canvas et keyboard

Message par Demivec »

Je sais que Nico a déjà répondu à votre question, mais vous pouvez obtenir une bonne utilisation sur un include j'ai écrit pour surveiller les événements sur on canvas.

Code pour la CanvasMonitor se trouve dans le forum anglais ici: http://www.purebasic.fr/english/viewtop ... 12&t=49468

Voici votre code avec elle comprenait:

Code : Tout sélectionner

XIncludeFile "canvasMonitor.pbi" ;ajuster chemin
initCanvasMonitor()

If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 200, 200,#PB_Canvas_DrawFocus|#PB_Canvas_Keyboard)
  monitorCanvas(0)
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget And EventGadget() = 0
      updateCanvasMonitor()
      Select EventType()
          
        Case #PB_EventType_KeyDown
          key = GetGadgetAttribute(0,#PB_Canvas_Modifiers)
          If key = #PB_Canvas_Control
            Debug "down"             
          EndIf
          
        Case #PB_EventType_KeyUp 
          ; key = GetGadgetAttribute(0,#PB_Canvas_Modifiers | #PB_Canvas_Control)  
          key2= GetGadgetAttribute(0,#PB_Canvas_Key)                        
          ; If key = #PB_Canvas_Control ; IF Key = 1 ; ??
          If  key2 = 17
            Debug "up"             
          EndIf           
          
      EndSelect
    EndIf   
    
  Until Event = #PB_Event_CloseWindow
EndIf
(préparé avec l'aide de Google translate)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Canvas et keyboard

Message par G-Rom »

mais ça ne marche pas sous windows
Win7 & linux , pas de problème (x64 les 2)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Canvas et keyboard

Message par falsam »

G-Rom a écrit :Win7 & linux , pas de problème (x64 les 2)
G-Rom si la détection de la touche Control quand elle est enfoncée fonctionne, ce n'est pas le cas quand la touche est relâchée. (Windows 7 x64 PB 5.15 et 5.20)
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%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Canvas et keyboard

Message par G-Rom »

je regarderais sur mon poste demain, la gestion des évènement n'est pas correct (de mémoire).
je confirmerais pour le relâchement de la touche.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Canvas et keyboard

Message par Backup »

comme ça , ça marche ! :)

carre rouge appuis
carre bleu relâchement

Code : Tout sélectionner

;***********************************************
;Titre  :*canvas test bouton relachement
;Auteur  : Dobro
;Date  :08/09/2013
;Heure  :21:43:54
;Version Purebasic :  PureBasic 5.11 (Windows - x86)
;Version de l'editeur :EPB V2.40
; Libairies necessaire : Aucune 
;***********************************************


Enumeration
	#win
	#canvas
EndEnumeration

UseJPEGImageDecoder()
L=320
H=200

If OpenWindow(#win,0,0,L,H,"CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	CanvasGadget(#canvas,0,0,L,H)
	
	Repeat
		Event = WindowEvent()
		
		If Event = #PB_Event_Gadget And EventGadget() = #canvas
			xm=GetGadgetAttribute(#canvas, #PB_Canvas_MouseX )
			ym=GetGadgetAttribute(#canvas, #PB_Canvas_Mousey )
			If EventType() = #PB_EventType_LeftButtonDown  
				StartDrawing(CanvasOutput(#canvas))
					box(xm,ym,50,50,rgb(255,0,0))
				StopDrawing()
				elseIf EventType() = #PB_EventType_LeftButtonup 
				StartDrawing(CanvasOutput(#canvas))
					box(xm,ym,50,50,rgb(0,0,255))
				StopDrawing()
			EndIf
		EndIf   
		
		
	Until Event = #PB_Event_CloseWindow
EndIf

; 

; EPB
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Canvas et keyboard

Message par G-Rom »

Canvas et keyboard
:mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Canvas et keyboard

Message par Backup »

ha oui ... pffff :roll: .. j'approche de la 50 aine.. ceci explique cela
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: Canvas et keyboard

Message par flaith »

Hello, j'utilise ce systeme (exemple pour verifier si CRTL-HOME appuyée ) :

Code : Tout sélectionner

    Repeat
      _EventWindow = WaitWindowEvent(5)
      Select _EventWindow
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #CANVAS      ;<-- mon canvas
              Select EventType()
                Case #PB_EventType_KeyDown
                  ; Check for CTRL, ALT, SHIFT
                  Canvas_Modifier = GetGadgetAttribute(#CANVAS, #PB_Canvas_Modifiers)
                  Select GetGadgetAttribute(#CANVAS, #PB_Canvas_Key)
                    Case #PB_Shortcut_Home
                      If Canvas_Modifier & #PB_Canvas_Control = #PB_Canvas_Control
                        Debug "CTRL-HOME"
                      EndIf
                      ...
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Canvas et keyboard

Message par blendman »

falsam a écrit :
G-Rom a écrit :Win7 & linux , pas de problème (x64 les 2)
G-Rom si la détection de la touche Control quand elle est enfoncée fonctionne, ce n'est pas le cas quand la touche est relâchée. (Windows 7 x64 PB 5.15 et 5.20)
je confirme pour l'appui ça marche, mais le relâchement, sous win8 x86 ça ne marche pas ;).
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Canvas et keyboard

Message par Mesa »

Ça a l'air d'être un bug. Si ça n'est pas déjà fait, post le sur le forum anglais stp.

Mesa.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Canvas et keyboard

Message par nico »

Je ne crois pas que ce soit un bug, les touches Control, shift et alt sont prévues être utiliser en combinaison d'autres touches, il n'y avait pas d'utilité à recevoir l'évènement du relachement. Il faudrait plutôt faire une requête.
Répondre