Page 1 sur 1

[OK] WindowEvent

Publié : jeu. 16/mars/2017 17:37
par Guillot
salut,

je pense qu'il y a un truc qui m'échappe
je cherche à connaitre l’état des boutons de la souris sur une fenetre
mais pas moyen
windowevent() renvoie les événements:
#PB_Event_RightClick
#PB_Event_LeftClick
...
mais rien au sujet de
LeftButtonDown
LeftButtonUp
MouseMove
...

avec canvasgadget :
EventType renvoie tous ce qu'on veut
(de même, GetGadgetAttribute et SetGadgetAttribute
permettent de connaitre / modifier de nombreuses infos (type de curseur souris, le mouvement de la molette...))

mais curieusement je n'arrive pas à faire de même avec les fenetres

je mettrai ce poste dans "Suggestions et améliorations" si effectivement y'a pas moyen d'acceder à ces infos
mais j'espere que j'ai loupé quelque chose...

quelqu'un pour m'aider ?

Re: WindowEvent

Publié : jeu. 16/mars/2017 17:46
par Ar-S
Salut,
Sur une fenêtre tu peux utiliser dans ta boucle
#WM_LBUTTONDOWN - #WM_LBUTTONUP pour le bouton gauche
#WM_RBUTTONDOWN - #WM_RBUTTONUP pour le bouton droit
#WM_MBUTTONDOWN - #WM_MBUTTONUP pour le bouton du milieu

Mais c'est du windows only. Je ne crois pas qu'on puisse nativement sous PB
Que l'on me corrige si je me trompe.

Dans la doc il est uniquement indiqué :
#PB_Event_RightClick
#PB_Event_LeftClick
#PB_Event_LeftDoubleClick

Re: WindowEvent

Publié : jeu. 16/mars/2017 18:53
par Shadow
Cadeau fais par mes soin :):

Code : Tout sélectionner

Enumeration 1
  
  #Fenetre
  
  #GadgetDebut
  
  ; Mettre uniquement ici toutes vos constantes de gadget (Entre #GadgetDebut et #GadgetFin)
  #Bouton
  
  #GadgetFin
  
EndEnumeration

; Les constantes des divers évènement possible
#PB_Event_MoveWindowMouse = 512
#PB_Event_WindowsLeftButtonDown = 513
#PB_Event_WindowsLeftButtonUp = 514
#PB_Event_WindowsLeftDoubleClick = 515
#PB_Event_WindowsRightButtonDown = 516
#PB_Event_WindowsRightButtonUp = 517
#PB_Event_WindowsRightDoubleClick = 518
#PB_Event_WindowsMiddleButtonDown = 519
#PB_Event_WindowsMiddleButtonUp = 520
#PB_Event_WindowsMiddleDoubleClick = 521
#PB_Event_WindowsMouseWheel = 522

#PB_Event_MouseMoveOverTitleBar = 160
#PB_Event_LeftButtonClickOverTitleBar = 161
#PB_Event_LeftButtonUpOverTitleBar = 162
#PB_Event_LeftButtonDoubleClickOverTitleBar = 163
#PB_Event_RightButtonClickOverTitleBar = 164
#PB_Event_RightButtonUpOverTitleBar = 165
#PB_Event_MiddleButtonDownOverTitleBar = 167
#PB_Event_MiddleButtonUpOverTitleBar = 168
#PB_Event_MiddleButtonDoubleClickOverTitleBar = 169
#PB_Event_MouseEnterOrLeaveWindows = 674
#PB_Event_NextPrevious = 0

; Procédure permettant de renvoyer le numéro du gadget ou se trouve la souris
Procedure.l MouseOverGadget() 
  For Gadget = #GadgetDebut + 1 To #GadgetFin - 1
    If IsGadget(Gadget)
      GetWindowRect_(GadgetID(Gadget),GadgetRect.RECT) 
      GetCursorPos_(mouse.POINT) 
      If mouse\x>=GadgetRect\Left And mouse\x<=GadgetRect\right And mouse\y>=GadgetRect\Top And mouse\y<=GadgetRect\bottom
        ProcedureReturn Gadget
      EndIf 
    EndIf
  Next
EndProcedure 

; Procédure permettant de renvoyer le numéro du gadget qui a le focus
Procedure.l GadgetFocus()
  For Gadget = #GadgetDebut + 1 To #GadgetFin - 1
    If IsGadget(Gadget)
      If GetActiveGadget() = Gadget
        ProcedureReturn Gadget 
      EndIf 
    EndIf
  Next
EndProcedure 

; Procédure permettant de renvoyer le type du gadget ou se trouve la souris
Procedure.s TypeGadget()
  For Gadget = #GadgetDebut + 1 To #GadgetFin - 1
    If IsGadget(Gadget)
      GetWindowRect_(GadgetID(Gadget),GadgetRect.RECT) 
      GetCursorPos_(mouse.POINT) 
      If mouse\x>=GadgetRect\Left And mouse\x<=GadgetRect\right And mouse\y>=GadgetRect\Top And mouse\y<=GadgetRect\bottom
        TypeGadget = GadgetType(Gadget)
        If TypeGadget = #PB_GadgetType_Button
          TypeGadget$ = "Button"
        ElseIf TypeGadget = #PB_GadgetType_ButtonImage
          TypeGadget$ = "ButtonImage"
        ElseIf TypeGadget = #PB_GadgetType_Calendar
          TypeGadget$ = "Calendar"
        ElseIf TypeGadget = #PB_GadgetType_CheckBox 
          TypeGadget$ = "CheckBox"
        ElseIf TypeGadget = #PB_GadgetType_ComboBox
          TypeGadget$ = "ComboBox"
        ElseIf TypeGadget = #PB_GadgetType_Container
          TypeGadget$ = "Container"
        ElseIf TypeGadget = #PB_GadgetType_Canvas
          TypeGadget$ = "Canvas"
        ElseIf TypeGadget = #PB_GadgetType_Date 
          TypeGadget$ = "Date"
        ElseIf TypeGadget = #PB_GadgetType_Editor
          TypeGadget$ = "Editor"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerCombo
          TypeGadget$ = "ExplorerCombo"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerList
          TypeGadget$ = "ExplorerList"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerTree
          TypeGadget$ = "ExplorerTree"
        ElseIf TypeGadget = #PB_GadgetType_Frame
          TypeGadget$ = "Frame"
        ElseIf TypeGadget = #PB_GadgetType_HyperLink 
          TypeGadget$ = "HyperLink"
        ElseIf TypeGadget = #PB_GadgetType_Image
          TypeGadget$ = "Image"
        ElseIf TypeGadget = #PB_GadgetType_IPAddress
          TypeGadget$ = "IPAddress"
        ElseIf TypeGadget = #PB_GadgetType_ListIcon
          TypeGadget$ = "ListIcon"
        ElseIf TypeGadget = #PB_GadgetType_ListView 
          TypeGadget$ = "ListView "
        ElseIf TypeGadget = #PB_GadgetType_MDI
          TypeGadget$ = "MDI"
        ElseIf TypeGadget = #PB_GadgetType_Option
          TypeGadget$ = "Option"
        ElseIf TypeGadget = #PB_GadgetType_Panel
          TypeGadget$ = "Panel"
        ElseIf TypeGadget = #PB_GadgetType_ProgressBar 
          TypeGadget$ = "ProgressBar"
        ElseIf TypeGadget = #PB_GadgetType_Scintilla
          TypeGadget$ = "Scintilla"
        ElseIf TypeGadget = #PB_GadgetType_ScrollArea
          TypeGadget$ = "ScrollArea"
        ElseIf TypeGadget = #PB_GadgetType_ScrollBar
          TypeGadget$ = "ScrollBar"
        ElseIf TypeGadget = #PB_GadgetType_Spin
          TypeGadget$ = "Spin"
        ElseIf TypeGadget = #PB_GadgetType_Splitter
          TypeGadget$ = "Splitter"
        ElseIf TypeGadget = #PB_GadgetType_String
          TypeGadget$ = "String"
        ElseIf TypeGadget = #PB_GadgetType_Text
          TypeGadget$ = "Text"
        ElseIf TypeGadget = #PB_GadgetType_TrackBar
          TypeGadget$ = "TrackBar"
        ElseIf TypeGadget = #PB_GadgetType_Tree
          TypeGadget$ = "Tree"
        ElseIf TypeGadget = #PB_GadgetType_Web 
          TypeGadget$ = "Web"
        ElseIf TypeGadget = #PB_GadgetType_Unknown
          TypeGadget$ = "Unknown"
        EndIf
      EndIf
      ProcedureReturn TypeGadget$ 
    EndIf
  Next
EndProcedure 

Procedure Ma_Fenetre()
  If OpenWindow(#Fenetre, 327, 177, 500, 300, "fenêtre windows",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
    ButtonGadget(#Bouton, 50, 50, 100, 25, "Bouton")
    
    Repeat ; Départ des évènements de boucle
      
      EventWindows = WaitWindowEvent() ; Cette ligne attend pendent (Minuteur) qu'un évènement soit recus par la fenêtre
      WindowID = EventWindow() ; La fenêtre oû l'évènement c'est produit
      GadgetID = EventGadget() ; Pour savoir sur quel gadget c'est produis l'évènement
      MenuID = EventMenu() ; Pour savoir sur quel menue c'est produis l'évènement
      EventType = EventType() ; Le type d'évènement qui c'est produis sur le gadget
      EventTimer = EventTimer() ; Le numéro du timer ou s'est produit l'évènement (Le temps du minuteur s'est écoulé)
      MouseOverGadget = MouseOverGadget() ; Le numéro du gadget ou se trouve la souris
      FocusGadget = GadgetFocus() ; Le numéro du gadget qui a le focus
      GadgetType$ = TypeGadget() ; Le type du gadget ou se trouve la souris
      
      ClearDebugOutput()
      
      Debug "La souris se trouve actuellement sur le gadget: " + Str(MouseOverGadget)
      Debug "Le type de se gadget est: " + GadgetType$
      Debug "Le gadget qui a actuellement le focus est: " + Str(FocusGadget)
      
      If EventWindows = #PB_Event_Gadget ; Un évènement c'est passé sur un gadget
        
        If GadgetID = #Bouton
          
        ElseIf GadgetID = 0
          
        EndIf
        
      ElseIf EventWindows = #PB_Event_Menu ; Un menu a été sélectionné
        
        If MenuID = 0
          
        ElseIf MenuID = 0
          
        EndIf
        
      ElseIf EventWindows = #PB_Event_SysTray ; Une icône dans la zone SysTray a été cliquée 
        
      ElseIf EventWindows = #PB_Event_Timer ; Le temps d'un minuteur s'est écoulé
        
      ElseIf EventWindows = #PB_Event_Repaint ; Tout ou une partie du contenu de la fenêtre a été détruit et doit être reconstitué
        
      ElseIf EventWindows = #PB_Event_MoveWindow ; La fenêtre a été déplacée
        
      ElseIf EventWindows = #PB_Event_MinimizeWindow ; La fenêtre a été minimisée
        
      ElseIf EventWindows = #PB_Event_MaximizeWindow ; La fenêtre a été maximisée
        
      ElseIf EventWindows = #PB_Event_RestoreWindow ; La fenêtre a été restaurée à sa taille normale
        
      ElseIf EventWindows = #PB_Event_SizeWindow ; La fenêtre a été redimensionnée
        
      ElseIf EventWindows = #PB_Event_ActivateWindow ; La fenêtre a été activée (gain du focus)
        
      ElseIf EventWindows = #PB_Event_WindowDrop ; Une opération Glisser & Déposer s'est terminée sur une fenêtre
        
      ElseIf EventWindows = #PB_Event_GadgetDrop ; Une opération Glisser & Déposer s'est terminée sur un gadget
        
      ElseIf EventWindows = #PB_Event_CloseWindow ; L'icône de fermeture de la fenêtre a été cliquée
        
      ElseIf EventWindows = #PB_Event_MoveWindowMouse ; Déplacement de la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsLeftButtonDown ; Bouton gauche appuyer avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsLeftButtonUp ; Bouton gauche relacher avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsLeftDoubleClick ; Double clique gauche avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsRightButtonDown ; Bouton droit appuyer avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsRightButtonUp ; Bouton droit relacher avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsRightDoubleClick ; Double clique droit avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsMiddleButtonDown ; Bouton milieux appuyer avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsMiddleButtonUp ; Bouton milieux relacher avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsMiddleDoubleClick ; Double clique milieux avec la souris sur la fenêtre 
        
      ElseIf EventWindows = #PB_Event_WindowsMouseWheel ; La molêtte de la souris tourne
        
      ElseIf EventWindows = #PB_Event_MouseMoveOverTitleBar ; Déplacement de la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_LeftButtonClickOverTitleBar ; Clique gauche avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_LeftButtonUpOverTitleBar ; Bouton gauche relacher avec la souris sur la barre de titre de la fenêtre*
        
      ElseIf EventWindows = #PB_Event_LeftButtonDoubleClickOverTitleBar ; Double Clique gauche avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_RightButtonClickOverTitleBar ; Clique droit avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_RightButtonUpOverTitleBar ; Bouton droit relacher avec la souris sur la barre de titre de la fenêtre*
        
      ElseIf EventWindows = #PB_Event_MiddleButtonDownOverTitleBar ; Bouton milieux appuyer avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_MiddleButtonUpOverTitleBar ; Bouton milieux relacher avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_MiddleButtonDoubleClickOverTitleBar ; Double Clique milieux avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_MouseEnterOrLeaveWindows ; La souris viens d'entrer ou de quitter la fenêtre
        
      EndIf
      
    Until EventWindows = #PB_Event_CloseWindow ; Fin des évènements de boucle
    
  EndIf
EndProcedure

Ma_Fenetre()

Re: WindowEvent

Publié : jeu. 16/mars/2017 19:41
par SPH
Heuuu ! C'est moi ou le ElseIf pique les yeux :?:

Re: WindowEvent

Publié : jeu. 16/mars/2017 22:18
par falsam
SPH a écrit :Heuuu ! C'est moi ou le ElseIf pique les yeux :?:
Pas que ElseIf :p

@Shadow :

#PB_Event_WindowsLeftButtonDown = 513 ou #WM_LBUTTONDOWN c'est la même chose.
#PB_Event_WindowsLeftButtonUp = 514 ou #WM_LBUTTONUP c'est la même chose.
etc ....

Re: WindowEvent

Publié : jeu. 16/mars/2017 22:21
par falsam

Code : Tout sélectionner

OpenWindow(0, 0, 0, 800, 700, "#WM etc ....", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
ButtonGadget(#PB_Any, 5, 5, 80, 20, "One")
ButtonGadget(#PB_Any, 5, 25, 80, 20, "Two")
ButtonGadget(#PB_Any, 5, 45, 80, 20, "Three")
StringGadget(#PB_Any, 5, 70, 200, 22, "")

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow
      End
      
    Case #WM_MOUSEMOVE 
      Debug "#WM_MOUSEMOVE " + Str(EventwParam()) 
      Debug "#WM_MOUSEMOVE " + Str(EventlParam()) 
      
    Case #WM_LBUTTONDBLCLK  
      Debug "#WM_LBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_LBUTTONDOWN  
      Debug "#WM_LBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_LBUTTONUP  
      Debug "#WM_LBUTTONUP " + Str(EventwParam()) 
      Debug "#WM_LBUTTONUP " + Str(EventlParam()) 
      
    Case #WM_RBUTTONDOWN  
      Debug "#WM_RBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_RBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_RBUTTONUP 
      Debug "#WM_RBUTTONUP" + Str(EventwParam()) 
      Debug "#WM_RBUTTONUP" + Str(EventlParam()) 
      
    Case #WM_MBUTTONDBLCLK 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_NCMOUSEMOVE 
      Debug "#WM_NCMOUSEMOVE " + Str(EventwParam()) 
      Debug "#WM_NCMOUSEMOVE " + Str(EventlParam()) 
      
    Case #WM_NCLBUTTONDBLCLK 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_ACTIVATE 
      Debug "#WM_ACTIVATE " +Str(EventwParam()) 
      Debug "#WM_ACTIVATE " +Str(EventlParam()) 
      
    Case #WM_CHAR 
      Debug "#CHAR w:    " + Str(EventwParam()) 
      Debug "#CHAR l:    " + Str(EventlParam()) 
      
    Case #WM_DEADCHAR ;Caractères hors-système
      Debug "#DEADCHAR:   " + Str(EventwParam()) 
      
    Case #WM_KEYDOWN 
      Debug "#KEYDOWN: " + Str(EventwParam()) 
      Debug "#KEYDOWN: " + Str(EventlParam()) 
      
    Case #WM_KEYUP 
      Debug "#KEYUP:   " + Str(EventwParam()) 
      
    Case #WM_SYSCHAR 
      Debug "#SYSCHAR:   " + Str(EventwParam()) 
      
    Case #WM_SYSDEADCHAR  
      Debug "#SYDEADSCHAR:   " + Str(EventwParam()) 
      
    Case #WM_SYSKEYDOWN  ;Exemple Alt
      Debug "#SYSKEYDOWN:   " + Str(EventwParam()) 
      
    Case #WM_SYSKEYUP 
      Debug "#SYSKEYUP:   " + Str(EventwParam()) 
  EndSelect 
ForEver

Re: WindowEvent

Publié : ven. 17/mars/2017 6:43
par Micoute
Qu'il est bavard ce programme, j'adore, grand merci pour le partage.

Re: WindowEvent

Publié : ven. 17/mars/2017 9:43
par Zorro
Je rappel qu'il existe sur le forum un index des tutos qui se trouve ici :
http://www.purebasic.fr/french/viewtopic.php?f=1&t=6664

Re: WindowEvent

Publié : ven. 17/mars/2017 10:13
par Guillot
merci les gars
ça répond à mes besoins
(c'est juste dommage que ça soit pas multiplatforme...)

ah, pinaise j'avais jamais vu ces tutos
interressant

Re: WindowEvent

Publié : ven. 17/mars/2017 13:08
par falsam
Pour le travail de groupe j'ai opté maintenant pour GitHub. Travailler sur GitHub est maintenant à la portée de tout le monde. Une fois le compte créer un simple drag & drop permet de transférer un dossier ou un fichier.
http://www.purebasic.fr/french/viewtopi ... 97#p182397

Il est possible de créer une organisation sur GitHub comportant plusieurs collaborateurs.

Re: WindowEvent

Publié : ven. 17/mars/2017 21:01
par Ar-S
Topic nettoyé.