MouseReleasedButton

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

MouseReleasedButton

Message 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 <<<<
; <<<<<<<<<<<<<<<<<<<<<<<<
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Re: MouseReleasedButton

Message 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...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: MouseReleasedButton

Message 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.
Avatar de l’utilisateur
raven
Messages : 222
Inscription : jeu. 06/janv./2005 15:45

Re: MouseReleasedButton

Message 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
Répondre