#WM_centreBUTTONDOWN ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

#WM_centreBUTTONDOWN ?

Message par SPH »

Salut,

Crisot m'a genereusement fait une procedure pour controler les boutons de la souris.
Il y a le bouton gauche et le bouton droit :

Code : Tout sélectionner

Procedure CrisotMouseButton() ; Très, très sale (PB ne gère pas les Event ButtonUp ou ButtonDown)
	Repeat
		Event = WindowEvent()
		Select Event
			Case #WM_LBUTTONDOWN	; Sale
				LMB=#True
			Case #PB_Event_LeftClick
				LMB=#False
			Case #WM_RBUTTONDOWN	; Sale
				RMB=#True
			Case #PB_Event_RightClick
			  RMB=#False
		EndSelect
	Until Event=0
EndProcedure
Comment controler le bouton centre de la souris ?

Code : Tout sélectionner

Case #WM_CBUTTONDOWN	; Sale
	     CMB=#True
        Case #PB_Event_CentreClick
	     CMB=#False
:?: :?: :?:

!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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: #WM_centreBUTTONDOWN ?

Message par falsam »

Avec #WM_MBUTTONDOWN peut etre ?
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%
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: #WM_centreBUTTONDOWN ?

Message par TazNormand »

Image
Image
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: #WM_centreBUTTONDOWN ?

Message par SPH »

Merci beaucoup pour vos reponses. 8)

!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
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: #WM_centreBUTTONDOWN ?

Message par TazNormand »

Topic nettoyé !

@ Micheao : Merci de ne plus troller les topics INUTILEMENT !
Image
Image
crisot
Messages : 98
Inscription : lun. 30/août/2004 21:03

Re: #WM_centreBUTTONDOWN ?

Message par crisot »

Ouch, la procédure qui va (ou qui a?) faire parler x)
crisot
Messages : 98
Inscription : lun. 30/août/2004 21:03

Re: #WM_centreBUTTONDOWN ?

Message par crisot »

Attention j'ai fait ça dans le cadre de HexaScrabble et de ses quelques clics (virer les ExamineMouse()).

Cette procédure flush complètement les WindowEvent(), ça peut rapidement foutre le bordel dans un projet qui en a besoin (auquel cas il faudra tout regrouper ailleurs).
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: #WM_centreBUTTONDOWN ?

Message par Ollivier »

@Crisot

Bonjour!

Il existe une autre fonction utilisée par un code de Flype ici :
http://www.purebasic.fr/english/viewtop ... e&start=15

Ça regroupe tous les états des boutons des clavier et souris (roulette exclue)

Les états de verrouillage clavier y sont aussi je crois.

Voici la copie de ce code et la note de référence que Flype y a assortie.

Fonctionne en x86. Pas testé en x64.

Code : Tout sélectionner

Macro MYSTR(x)
RSet(StrU(x, #Byte), 3, "0")
EndMacro
Dim KeyboardState.b(256)
LoadFont(0, "Courier", 8)
If OpenWindow(0, 0, 0, 570, 255, "GetKeyboardState_()", #PB_Window_SystemMenu |
#PB_Window_ScreenCentered)
SetWindowColor(0, #White)
Repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
Break
Case 0
If GetKeyboardState_( @KeyboardState() )
If StartDrawing( WindowOutput(0) )
DrawingFont( FontID(0) )
For y = 0 To 15
For x = 0 To 15
Line( 36 * x - 5, 0, 0, 300)
DrawText( 36 * x, 16 * y, MYSTR( KeyboardState( y << 4 +
x) ) )
Next x
Next y
StopDrawing()
EndIf
EndIf
Delay(1)
EndSelect
ForEver
EndIf
Pour expliquer chaque valeur de KeyboardStat(), Flype a écrit :Quand la fonction a été exécutée, chaque membre du tableau KeyboardState contient les drapeaux d'état d'une touche virtuelle.

Si le bit le plus élevé (KeyboardState(x) & $80 NdT) est à 1, la touche est appuyée, sinon, elle est non appuyée.

Si le bit le moins élevé (KeyboardState(x) & 1 NdT) alors la bascule est enclenchée (Exemple : touche NUM LOCK allumée, les boutons de souris c'est idem NdT), sinon il est désenclenché.

La touche est lachée et sa bascule déclenchée si KeyboardState(x) & $81 = 0 (j'ai un peu corrigé parce que chez Microsoft, il ne sont pas épargnés par la picole NdT)

Les DELs indicatrices du clavier s'allument selon l'état de la bascule des touches concernent.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: #WM_centreBUTTONDOWN ?

Message par nico »

Code : Tout sélectionner

;Application du message WM_MOUSEWEEL

#WM_MOUSEWHEEL = $20A
; Le coef permet d'ajuster le pas a une valeur voulue, qui est 120 par défaut.
Global coef.l = 1

Procedure ProcedureCallback(WindowID, Message, wParam, lParam) 
  Resultat = #PB_ProcessPureBasicEvents 
  Protected high.l, low.l
  Protected x.l, y.l
  Protected Delta.l
  ;Debug message
  
  Select Message
    Case #WM_MBUTTONDOWN 
      MessageRequester("Info", "Click bouton milieu, la molette ne tourne pas")
      
    Case #WM_MOUSEWHEEL
      high = wParam >> 16
      low = wParam & $FFFF
      x = lParam >> 16
      y = lParam & $FFFF
      
      ; Position x et y de la souris par rapport à l'écran
      ; et sans rapport donc avec la fenêtre où le control
      Debug "-----Position Souris-----"
      Debug x
      Debug y
      
      Delta = high * coef
      
      If Delta >= 120
        Debug "-----Positif-----"
        Debug delta
      ElseIf Delta <= -120
        Debug "-----Négatif-----"
        Debug Delta
      EndIf
      

      ;Ici, si la molette ne tourne pas, nous n'avons pas les notifications suivantes
      ; Pas de elseif car la valeur de Low peut prendre plusieurs valeurs.

      If low & #MK_CONTROL ;0x0008 The CTRL key is down.
        ;MessageRequester("Info", "Touche CTRL appuyé, la molette tourne")
      EndIf
      
      If low & #MK_LBUTTON ;0x0001 The left mouse button is down
        MessageRequester("Info", "Bouton gauche souris appuyé, la molette tourne")  
      EndIf
      
      If low & #MK_MBUTTON ;0x0010 The middle mouse button is down
        MessageRequester("Info", "Bouton milieu souris appuyé, la molette tourne")    
      EndIf
      
      If low & #MK_RBUTTON ;0x0002 The right mouse button is down
        MessageRequester("Info", "Bouton droit souris appuyé, la molette tourne")     
      EndIf
      
      If low & #MK_SHIFT ;0x0004 The SHIFT key is down
        ;MessageRequester("Info", "Touche SHIFT appuyé, la molette tourne")    
      EndIf
      
      If low & #MK_XBUTTON1 ;0x0020 The first X button is down
        MessageRequester("Info", "Premier bouton X souris appuyé, la molette tourne")   
      EndIf
      
      If low & #MK_XBUTTON2 ;0x0040 The second X button is down
        MessageRequester("Info", "Deuxième bouton X appuyé, la molette tourne")
      EndIf 
      

      ; Au dessus, c'est pour l'exemple, dans une application, on fera par exemple:
      ; Touche control + shift + molette augmente ou diminue un zoom suivant la rotation de la molette

      If low & #MK_CONTROL And low & #MK_SHIFT And Delta >= 120
        Debug "Zoom diminue"
      EndIf
      
      If low & #MK_CONTROL And low & #MK_SHIFT And Delta <= 120
        Debug "Zoom augmente"
      EndIf
      
      Resultat = 0
  EndSelect
  
  ProcedureReturn Resultat 
EndProcedure 


If OpenWindow(0,0,0,400,400,"ScrollAreaGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  SetWindowCallback(@ProcedureCallback()) 
  
  Repeat
    EventID.l=WaitWindowEvent()
    Select EventID
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1
            
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit=1
    EndSelect 
  Until Quit=1 
EndIf
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: #WM_centreBUTTONDOWN ?

Message par falsam »

Je pense que SPH a oublié de préciser que la fameuse procédure se trouvant dans le premier message est incluse dans un jeu. Peut être qu'il le confirmera.
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%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: #WM_centreBUTTONDOWN ?

Message par Ollivier »

nico t'as déchiré! Merci pour le raffinement de cette recherche.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: #WM_centreBUTTONDOWN ?

Message par Ollivier »

@Falsam

Déjà SPH peut se brosser pour avoir une procédure, il n'aura qu'une macro. Il faut se mettre au normes EPA Pollution et les procédures ça consomme plus de ressources!
crisot
Messages : 98
Inscription : lun. 30/août/2004 21:03

Re: #WM_centreBUTTONDOWN ?

Message par crisot »

Fantastique Ollivier, je ne savais pas qu'on pouvait trouver ces états dans les KeyStates. Super, j'en prend bonne note!!! Merci.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: #WM_centreBUTTONDOWN ?

Message par Ollivier »

Bonjour Crisot, (et falsam)

Je comprends pas trop "un jeu", il y 6 supports graphiques de jeux possibles:

a - opengl
b- canvas

c - fenêtre transparente (Windows uniquement)

d- fenêtre normale

e- graphique fenêtré
f- graphique plein écran

Je pense qu'il vous faut ériger un tableau et rajouter autant de colonnes qu'il n'y a de fonctions.
Vous y compléterez les cases par des X ou des ratios.
Le tableau obtenu doit être observé après l'inventaire des contraintes ergonomiques de votre jeu.

Ne vous décevez d'aucune complication d'initialisation.
Une procédure InitScreen(n) avec n de 1 à 6 pour les 6 supports. Et vous n'y touchez plus sur x jeux. InitScreen() doit s'exécuter le plus rapidement possible.

Ensuite, c'est la partie basculement type changement de tâche qu'il faut gérer à la perfection et faire tester au maximum.

Cette fonction c'est pour e et f.

Code : Tout sélectionner

Macro BoutonDuMilieu: MouseButton(4)
EndMacro
Désolé encore pour l'édition matinale et dominicale.
Un petit coucou à SPH.
Dernière modification par Ollivier le dim. 23/août/2015 8:15, modifié 1 fois.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: #WM_centreBUTTONDOWN ?

Message par blendman »

Concernant la souris, vous pouvez aussi zieuter du côté des tutoriaux, il y en a un dédié aux souris, avec presque tout dedans :
http://www.purebasic.fr/french/viewtopi ... =21&t=1310

Le problème avec la souris, lorsqu'on utilise un screen (pour un jeu ou une application graphique), c'est que la souris est enfermée et bloquée dans le screen. J'avais posté ce code pour la souris avec un screen (éviter de bloquer la souris dans l'écran notamment) :
http://www.purebasic.fr/french/viewtopi ... =6&t=15258
Répondre