Page 1 sur 1

MouseReleasedButton

Publié : sam. 31/déc./2005 4:44
par Guimauve
De retour après presque 2 mois. Je travaille présentement sur l'interface simple 2D d'un future jeu 3D. J'ai eu des problèmes avec les cliques de souris. De tout évidence, la commande MouseButton() n'est pas l'idéale pour gérer les évènements d'un interface graphique. Alors sans plus attendre, voiçi le source d'une solution pour attendre que l'utilisateur relâche le bouton de la souris avant de lancer une commande.

Restez en alerte, demain j'ajouterai un exemple d'utilisation.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : MouseReleasedButton
; Fichier : Source principal
; Version : 1.0.0
; Programmation = OK
; Programmé par : Guimauve
; Date : 30-12-2005
; Mise à jour : 30-12-2005
; Codé avec PureBasic V3.94
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Enumeration 1
   
   #Mouse_Left_Button
   #Mouse_Right_Button
   #Mouse_Center_Button
   
EndEnumeration 

Procedure.b MouseReleasedButton(ButtonNumber.b)
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; <<<<< On force la procédure à se souvenir des <<<<<
   ; <<<<< valeurs des variables de détection d'un <<<<<
   ; <<<<< relâchement d'un des trois boutons.     <<<<<
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
   Static Appel.b
   Static Appuyee.b
   Static Relachee.b 
   Static Memoire.b
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; <<<<< Si la commande à envoyée son impulsion <<<<<
   ; <<<<< de relâchement de bouton de la souris, <<<<<
   ; <<<<< on prépare la procédure pour le clique <<<<<
   ; <<<<< suivant. Nécessaire : Variables STATIC <<<<<
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
   If Appel = #False
      
      Relachee = #False
      Memoire = #False
      Appel = #True
      
   EndIf 
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; <<<<< On regarde si le bouton spécifié est appuyé. <<<<<
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
   Appuyee = MouseButton(ButtonNumber)
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; <<<<< S'il est appuyé on mémorise l'état du bouton  <<<<<
   ; <<<<< Si le bouton est appuyé il n'est pas relaché. <<<<<
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
   If Appuyee = #True 
      
      Relachee = #False 
      Memoire = #True
      
   EndIf 
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; <<<<< Le bouton à été relâché, on prépare l'envoi de <<<<<
   ; <<<<< l'impulsion. De plus, prépare la procédure     <<<<<
   ; <<<<< pour le clique de souris suivant.              <<<<<
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
   If Appuyee = #False And Relachee = #False And Memoire = #True 
      
      Relachee = #True
      Appel = #False 
      
   EndIf 
   
   ProcedureReturn Relachee
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<< FIN DU FICHIER <<<<
; <<<<<<<<<<<<<<<<<<<<<<<<

Re: MouseReleasedButton

Publié : sam. 31/déc./2005 9:29
par lionel_om
Guimauve a écrit :; Programmation = OK
Mdr, ca veut dire quoi ??? :D

J'avais déjà fais une procedure similaire, mais je passais par des variables globales :

Code : Tout sélectionner

Global MouseExClic.b, MouseClic.b, MousePressed.b, MouseReleased.b

Procedure DetectClic()
  MouseClic     = #Null
  MouseReleased = #Null
  If MouseButton(1) And MouseExClic = #Null
      MouseClic = #True
  EndIf
  If MouseButton(1)=0 And MouseExClic = #True
      MouseReleased = #True
  EndIf
  MouseExClic  = MouseButton(1)
  MousePressed = MouseButton(1)
EndProcedure

;...
ExamineMouse()
DetectClic()
If MouseReleased
  ;blabla
EndIf
; etc...

Re: MouseReleasedButton

Publié : sam. 31/déc./2005 21:22
par Guimauve
lionel_om a écrit :
Guimauve a écrit :; Programmation = OK
Mdr, ca veut dire quoi ??? :D
C'est simple, le code ne me boggue plus en pleine face. Comme il me le faisait pendant le dévellopement.

Personnellement, je ne suis pas un programmeur professionnel et donc c'est par tâtonnement, par GOSSAGE qu'on dirait en bon québécois, que je dévellope des procédures. Et parfois ça prend des heures et des heures avant que ça marche que je le veux.

Personnellement, utiliser des Variables Globales je ne fais jamais ça.
Tout comme taper le chemin d'accès à une structure de donnée un peu partout dans le code.

Bref un caprice de programmeur.

A+
Guimauve

PS l'exemple n'est pas encore près, mais il le sera bientôt.

Re: MouseReleasedButton

Publié : mer. 10/mai/2006 1:11
par raven
J'avais déjà fais une procedure similaire, mais je passais par des variables globales :

Code : Tout sélectionner

Global MouseExClic.b, MouseClic.b, MousePressed.b, MouseReleased.b

Procedure DetectClic()
  MouseClic     = #Null
  MouseReleased = #Null
  If MouseButton(1) And MouseExClic = #Null
      MouseClic = #True
  EndIf
  If MouseButton(1)=0 And MouseExClic = #True
      MouseReleased = #True
  EndIf
  MouseExClic  = MouseButton(1)
  MousePressed = MouseButton(1)
EndProcedure

;...
ExamineMouse()
DetectClic()
If MouseReleased
  ;blabla
EndIf
; etc...
[/quote]
un grand merci a vous 2 :D
voila ce que je cherché pour les clics en plein ecran merci beaucoup