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é.