Gérer la molette de la souris

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Gérer la molette de la souris

Message par Le Soldat Inconnu »

Salut,

j'arrive à savoir que j'utiulise la molette mais je n'arrive pas à trouver dans quel sens.

j'ai essayé avec eventwparam() et eventlparam() sans succès

un exemple :

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu, Fred
; Version de PB : 3.90
; 
; Explication du programme :
; Détection des différents état de la souris - Appuyer sur le bouton gauche, relacher le bouton gauche, double clic, etc ...

#WM_MOUSEWHEEL = $20A

If OpenWindow(0, 0, 0, 200, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Souris")
  
  SetClassLong_(WindowID(), #GCL_STYLE, GetClassLong_(WindowID(), #GCL_STYLE) | #CS_DBLCLKS) ; Active la gestion du double clic
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LBUTTONDOWN
      Debug "Bouton gauche appuyé"
      
    ElseIf Event = #WM_LBUTTONUP
      Debug "Bouton gauche relaché"
      
    ElseIf Event = #WM_LBUTTONDBLCLK
      Debug "Double clic gauche"
      
    ElseIf Event = #WM_RBUTTONDOWN
      Debug "Bouton droit appuyé"
      
    ElseIf Event = #WM_RBUTTONUP
      Debug "Bouton droit relaché"
      
    ElseIf Event = #WM_RBUTTONDBLCLK
      Debug "Double clic droit"
      
    ElseIf Event = #WM_MBUTTONDOWN
      Debug "Bouton du milieu appuyé"
      
    ElseIf Event = #WM_MBUTTONUP
      Debug "Bouton du milieu relaché"
      
    ElseIf Event = #WM_MBUTTONDBLCLK
      Debug "Double clic du milieu"
      
    ElseIf Event = #WM_MOUSEWHEEL
      Debug "Molette"
      
    EndIf
    
  Until Event = #WM_CLOSE
EndIf
merci
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

vala

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu, Fred 
; Version de PB : 3.90 
; 
; Explication du programme : 
; Détection des différents état de la souris - Appuyer sur le bouton gauche, relacher le bouton gauche, double clic, etc ... 

#WM_MOUSEWHEEL = $20A 

If OpenWindow(0, 0, 0, 200, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Souris") 
  
  SetClassLong_(WindowID(), #GCL_STYLE, GetClassLong_(WindowID(), #GCL_STYLE) | #CS_DBLCLKS) ; Active la gestion du double clic 
  
  Repeat 
    Event = WaitWindowEvent() 
    
    If Event = #WM_LBUTTONDOWN 
      Debug "Bouton gauche appuyé" 
      
    ElseIf Event = #WM_LBUTTONUP 
      Debug "Bouton gauche relaché" 
      
    ElseIf Event = #WM_LBUTTONDBLCLK 
      Debug "Double clic gauche" 
      
    ElseIf Event = #WM_RBUTTONDOWN 
      Debug "Bouton droit appuyé" 
      
    ElseIf Event = #WM_RBUTTONUP 
      Debug "Bouton droit relaché" 
      
    ElseIf Event = #WM_RBUTTONDBLCLK 
      Debug "Double clic droit" 
      
    ElseIf Event = #WM_MBUTTONDOWN 
      Debug "Bouton du milieu appuyé" 
      
    ElseIf Event = #WM_MBUTTONUP 
      Debug "Bouton du milieu relaché" 
      
    ElseIf Event = #WM_MBUTTONDBLCLK 
      Debug "Double clic du milieu" 
      
    ElseIf Event = #WM_MOUSEWHEEL 
      Debug "Molette" 
      If EventwParam() < 0
        Debug "avant"
      Else
        Debug "arriere"
      EndIf
      
    EndIf 
    
  Until Event = #WM_CLOSE 
EndIf
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Sinon peut-être qu'avec une burette d'huile... :mrgreen: :0:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ouaaa geant !!
j'ai cherché mais pas trouvé !! :D

c'est quoi ce
If EventwParam()
c'est une variable ??
d'ou tu le sort ça ? :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ben et quand EventWparam() est égale à 0 ou positif dans les 2 cas car c'est mon problème ?
je faisais comme ça avant mais la dans mon exe, ça fait un peu n'importe quoi :(
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Alors essaye ça!

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu, Fred 
; Version de PB : 3.90 
; 
; Explication du programme : 
; Détection des différents état de la souris - Appuyer sur le bouton gauche, relacher le bouton gauche, double clic, etc ... 

#WM_MOUSEWHEEL = $20A 
#WHEEL_DELTA = 120

If OpenWindow(0, 0, 0, 200, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Souris") 
  
  SetClassLong_(WindowID(), #GCL_STYLE, GetClassLong_(WindowID(), #GCL_STYLE) | #CS_DBLCLKS) ; Active la gestion du double clic 
  
  Repeat 
    Event = WaitWindowEvent() 
    
    If Event = #WM_LBUTTONDOWN 
      Debug "Bouton gauche appuyé" 
      
    ElseIf Event = #WM_LBUTTONUP 
      Debug "Bouton gauche relaché" 
      
    ElseIf Event = #WM_LBUTTONDBLCLK 
      Debug "Double clic gauche" 
      
    ElseIf Event = #WM_RBUTTONDOWN 
      Debug "Bouton droit appuyé" 
      
    ElseIf Event = #WM_RBUTTONUP 
      Debug "Bouton droit relaché" 
      
    ElseIf Event = #WM_RBUTTONDBLCLK 
      Debug "Double clic droit" 
      
    ElseIf Event = #WM_MBUTTONDOWN 
      Debug "Bouton du milieu appuyé" 
      
    ElseIf Event = #WM_MBUTTONUP 
      Debug "Bouton du milieu relaché" 
      
    ElseIf Event = #WM_MBUTTONDBLCLK 
      Debug "Double clic du milieu" 
      
    ElseIf Event = #WM_MOUSEWHEEL 
      
      Molette.w = (EventwParam()>>16)&$FFFF
      sens = Molette/#WHEEL_DELTA
      
      If sens >0
        Debug "Molette en avant" 
      ElseIf sens <0
        Debug "Molette en arrière"
      EndIf
      
      
    EndIf 
    
  Until Event = #WM_CLOSE 
EndIf
Chris :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Code : Tout sélectionner

;Application du message WM_MOUSEWEEL

#WM_MOUSEWHEEL = $20A
Global Hscroll.l

Procedure ProcedureCallback(WindowID, Message, wParam, lParam) 
  Resultat = #PB_ProcessPureBasicEvents 
  ;Debug Message
  Select Message
    Case #WM_MOUSEWHEEL
      hi.w=(wParam>>16)
      lo.w=wParam & $FFFF
      
      If lo.w & #MK_MBUTTON
        ;indique le click de la molette seulement si celle-ci tourne
        MessageRequester("Info", "Click de la molette")
      EndIf
      
      coef=4
      delta=hi*coef
      Debug delta
      
      While delta>120
        SendMessage_(Hscroll, #WM_VSCROLL, #SB_LINEUP, 0)
        delta=delta-(120+coef)
      Wend
      
      While delta< -120
        SendMessage_(Hscroll, #WM_VSCROLL, #SB_LINEDOWN, 0)
        delta=delta+(120+coef)
      Wend

  EndSelect
 
  ProcedureReturn Resultat 
EndProcedure 
  

If OpenWindow(0,0,0,400,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ScrollAreaGadget") And CreateGadgetList(WindowID(0)) 
  Hscroll=ScrollAreaGadget(0, 10, 10,360,300, 340, 800, 30) 
  ButtonGadget  (1, 10, 140,230, 30,"Button 1") 
  CloseGadgetList() 
   
  SetWindowCallback(@ProcedureCallback()) 

  Repeat
    EventID.l=WaitWindowEvent()
    Select EventID
      Case #PB_EventGadget
        Select EventGadgetID()
          Case 1

        EndSelect
         
      Case #WM_CLOSE
        Quit=1
    EndSelect 
  Until Quit=1 
EndIf
Dernière modification par nico le mer. 25/août/2004 17:11, modifié 4 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

je regarde, merci Chris :wink:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'ai mis un petit exemple moi aussi plus haut :)

Je viens de le modifier pour rajouter un coefficient de vitesse de déplacement.
Répondre