Tester si bouton de souris appuyé ?
Tester si bouton de souris appuyé ?
Bonjour,
Les gadgets répondent à des clicks de bouton de la souris, mais pas à des entrées de la souris avec le bouton de la souris déjà baissé.
Y-aurait-t-il un moyen de contourner cela ?
Merci d'avance.
Les gadgets répondent à des clicks de bouton de la souris, mais pas à des entrées de la souris avec le bouton de la souris déjà baissé.
Y-aurait-t-il un moyen de contourner cela ?
Merci d'avance.
Re: Tester si bouton de souris appuyé ?
Quelqu'un comprend il la question ? 

Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Tester si bouton de souris appuyé ?
Non... Un code serait plus parlant 

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Tester si bouton de souris appuyé ?
Code : Tout sélectionner
Procedure Thread(Argument)
Define.RECT Zone
Define.POINT Coord
Repeat
If GetAsyncKeyState_(#VK_LBUTTON)
GetWindowRect_(GadgetID(1),Zone.RECT)
GetCursorPos_(Coord.POINT)
If PtInRect_(Zone,Coord\y<<32 + Coord\x)=#True
SetGadgetText(2,"Survol Bouton droit appuyé")
Else
SetGadgetText(2,"")
EndIf
EndIf
Delay(100)
ForEver
EndProcedure
If OpenWindow(0,0,0,200,80,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(1,10,10,180,24,"Bouton",0)
TextGadget(2,10,40,180,24,"",0)
CreateThread(@Thread(),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Tester si bouton de souris appuyé ?
Une autre solution :
Code : Tout sélectionner
Global CallbackBouton
Procedure Fc_CallbackBouton(ArgHWnd,ArgMessage,ArgWParam,ArgLParam)
Select ArgMessage
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)=32769
Debug "Ok"
EndIf
EndSelect
ProcedureReturn CallWindowProc_(CallbackBouton,ArgHWnd,ArgMessage,ArgWParam,ArgLParam)
EndProcedure
If OpenWindow(0,0,0,200,80,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(1,10,10,180,24,"Bouton",0)
CallbackBouton=SetWindowLongPtr_(GadgetID(1),#GWL_WNDPROC,@Fc_CallbackBouton())
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Re: Tester si bouton de souris appuyé ?
J'essaie d'être plus clair :
J'ai un gadget par exemple un bouton ButtonImageGadget, si je clique dessus avec la souris il fonctionne bien, par contre si "j'entre" (je le survole ?) dessus avec le bouton déjà baissé il ne réagit pas, idem si je clique sur le gadget et que j'en "sors" en maintenant le bouton baissé le click n'est pas pris en compte !
Par exemple avec ce code (basé sur l'exemple de l'aide de pb pour ButtonImageGadget):SPH a écrit :
Non... Un code serait plus parlant![]()
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 200, 120, "ButtonImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If LoadImage(0, #PB_Compiler_Home + "/Examples/Sources/Data/PureBasic.bmp") ; image de l'exemple de l'aide de Pb
ButtonImageGadget(0, 10, 10, 180, 40, ImageID(0))
EndIf
Repeat :
Event = WaitWindowEvent() ; exemple-test : on affiche un message et c'est tout.
Select Event
Case #PB_Event_Gadget
MessageRequester( "Exemple", "bouton")
EndSelect
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Si on clique et relâche le bouton sans quitter l'image ça affiche un MessageRequester, mais si on clique en dessous de l'image et qu'on remonte la souris bouton appuyé rien ne se produit, idem si on clique sur l'image et qu'on sort de celle-ci en maintenant le bouton appuyé.
@ boddhi
Désolé mais ça ne marche pas, chez moi ?
La première donne à la compilation une erreur :
[13:08:47] [COMPILER] Line 2: Structure not found: RECT.
La deuxième donne :
[13:06:31] [COMPILER] Line 5: Constant not found: #WM_MOUSEMOVE.
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Tester si bouton de souris appuyé ?
C'est que tu utilises la version démo de PureBasic. RECT., #WM_MOUSEMOVE et des tas d'autres choses, sont des API propre aux systeme d'exploitation de Windows. La version de démonstration de PureBasic ne gère pas les API. Il faut contracter une licence. Cette licence est à vie, mise à jour comprise. De plus ça aide le développeur qui propulse ce langage.Stan_fr a écrit : lun. 27/mars/2023 14:02 @ boddhi
Désolé mais ça ne marche pas, chez moi ?
La première donne à la compilation une erreur :
[13:08:47] [COMPILER] Line 2: Structure not found: RECT.
La deuxième donne :
[13:06:31] [COMPILER] Line 5: Constant not found: #WM_MOUSEMOVE.

A consommer sans modération.
■ La question aussi sotte que grenu

Non mais quel idée de vouloir quitter un gadget en maintenant le clique gauche de la souris ? Quel est l'objectif ?Stan_fr a écrit : lun. 27/mars/2023 14:02 par contre si "j'entre" (je le survole ?) dessus avec le bouton déjà baissé il ne réagit pas, idem si je clique sur le gadget et que j'en "sors" en maintenant le bouton baissé le click n'est pas pris en compte !
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Tester si bouton de souris appuyé ?
Comme tu l'as dit : un "clic"
Un clic comprend l'action d'appuyer et relâcher un bouton. Si ces 2 actions ne sont pas faites sur le même gadget forcément ça foire.
Essaye avec n'importe quel bouton du forum, n'importe quel soft, ça fera pareil.
Comme l'a dit Falsam, après tu as toujours des possibilités en utilisant les api et les 'états' des boutons (enfoncé (#WM_LBUTTONDOWN), souris qui bouge, bouton relâché etc) mais la version complète de PB est requise.
Un clic comprend l'action d'appuyer et relâcher un bouton. Si ces 2 actions ne sont pas faites sur le même gadget forcément ça foire.
Essaye avec n'importe quel bouton du forum, n'importe quel soft, ça fera pareil.
Comme l'a dit Falsam, après tu as toujours des possibilités en utilisant les api et les 'états' des boutons (enfoncé (#WM_LBUTTONDOWN), souris qui bouge, bouton relâché etc) mais la version complète de PB est requise.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Tester si bouton de souris appuyé ?
L'objectif est de faire un programme qui remplisse les mêmes fonctions* que celui-ci qui nécessite une connexion pour fonctionner :falsam a écrit : lun. 27/mars/2023 14:46C'est que tu utilises la version démo de PureBasic. RECT., #WM_MOUSEMOVE et des tas d'autres choses, sont des API propre aux systeme d'exploitation de Windows. La version de démonstration de PureBasic ne gère pas les API. Il faut contracter une licence. Cette licence est à vie, mise à jour comprise. De plus ça aide le développeur qui propulse ce langage.Stan_fr a écrit : lun. 27/mars/2023 14:02 @ boddhi
Désolé mais ça ne marche pas, chez moi ?
La première donne à la compilation une erreur :
[13:08:47] [COMPILER] Line 2: Structure not found: RECT.
La deuxième donne :
[13:06:31] [COMPILER] Line 5: Constant not found: #WM_MOUSEMOVE.
79 Euros pour une licence à vie ça se trouve ici https://www.purebasic.com/french/pricing.php
A consommer sans modération.
FAIT ET EFFECTIVEMENT ÇA MARCHE![]()
■ La question aussi sotte que grenu
Non mais quel idée de vouloir quitter un gadget en maintenant le clique gauche de la souris ? Quel est l'objectif ?Stan_fr a écrit : lun. 27/mars/2023 14:02 par contre si "j'entre" (je le survole ?) dessus avec le bouton déjà baissé il ne réagit pas, idem si je clique sur le gadget et que j'en "sors" en maintenant le bouton baissé le click n'est pas pris en compte !
https://www.maxlaumeister.com/tonematrix/
où tu pourras constater que si tu déplaces la souris bouton gauche enfoncé ça sélectionne quand même ! (et même en venant de "l'extérieur" de la grille...)
*en fait les mêmes fonctions et peut-être plus (choix du son, des notes, sélection de la langue...), j'en ai peut-être pour un an avec de la chance

Pour l'instant j'en suis là :
https://drive.google.com/file/d/1vaFlML ... share_link
.
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Tester si bouton de souris appuyé ?
Les deux exemples fonctionneront si et seulement si :
1) Ton code tourne sous Windows
2)
1) Ton code tourne sous Windows
2)
Ce que tu souhaites ne sera pas faisable 1) avec la version démo et 2) avec les commandes natives de PBfalsam a écrit : C'est que tu utilises la version démo de PureBasic. RECT., #WM_MOUSEMOVE et des tas d'autres choses, sont des API propre aux systeme d'exploitation de Windows. La version de démonstration de PureBasic ne gère pas les API. Il faut contracter une licence. Cette licence est à vie, mise à jour comprise. De plus ça aide le développeur qui propulse ce langage.

Re: Tester si bouton de souris appuyé ?
Possibilités: utiliser les fonctions de Drag and drop ou des sprites
Re: Tester si bouton de souris appuyé ?
Oui, j'ai compris : j'ai maintenant une version avec licence et tes exemples fonctionnent !boddhi a écrit : lun. 27/mars/2023 16:39 Les deux exemples fonctionneront si et seulement si :
1) Ton code tourne sous Windows
2)Ce que tu souhaites ne sera pas faisable 1) avec la version démo et 2) avec les commandes natives de PBfalsam a écrit : C'est que tu utilises la version démo de PureBasic. RECT., #WM_MOUSEMOVE et des tas d'autres choses, sont des API propre aux systeme d'exploitation de Windows. La version de démonstration de PureBasic ne gère pas les API. Il faut contracter une licence. Cette licence est à vie, mise à jour comprise. De plus ça aide le développeur qui propulse ce langage.![]()
MERCI !
Reste plus qu'à trouver une doc sur les API...
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Tester si bouton de souris appuyé ?
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Tester si bouton de souris appuyé ?
Je te conseille vivement de te familiariser avec PB avant de te lancer dans les API ! C'est un aspect très ardu !
Commencer par de petits projets avant d'attaquer quelque chose de plus conséquent.
Un maçon commence toujours par construire de petits pans de murs avant de s'attaquer à la construction d'une maison
Commencer par de petits projets avant d'attaquer quelque chose de plus conséquent.
Un maçon commence toujours par construire de petits pans de murs avant de s'attaquer à la construction d'une maison

Re: Tester si bouton de souris appuyé ?
OK MERCI !falsam a écrit : lun. 27/mars/2023 18:27 Mise en oeuvre des API Windows avec PureBasic.
https://www.rsbasic.de/winapi-library/
Oui, mais un maçon a le droit d'utiliser un perforateur avec des avec des outils sds, si ça lui permet de mieux bosser...boddhi a écrit : Un maçon commence toujours par construire de petits pans de murs avant de s'attaquer à la construction d'une maison![]()

.