J'utilise la fonction KeyDown qui me permet de savoir quelle touche du =
clavier l'utilisateur a appuy=E9.
J'ai cr=E9=E9 un jeu et je voudrais =EAtre capable d'utiliser les deux =
touches Shift (majuscule gauche et droite). Le probl=E8me, c'est qu'ils =
ont tous les deux le m=EAme KeyCode, m=EAme chose pour certaines autres =
touches comme ALT et CTRL.
Comment d=E9tecter lequel des deux Shift l'utilisateur appuie-il ?
Merci d'avance.
=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF=AF
Cordialement
Daniel - Z
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alain Cotterot
Salut
shift est le second argument de l'évenement Keydown et indique par codification binaire si une des touches SHIFT, CTRL ou ALT est pressée
If shift and vbctrlMask <> 0 (Code si CTRL appuyé)
if shift and vbaltMask <> 0 (code si ALT est appuyé)
if shift and vbShiftMask <> 0 (code si SHIFT est appuyé)
Chacune des trois options n'élimine pas les autres
Alain Cotterot
Daniel - Z a écrit dans le message : # Bonjour.
J'utilise la fonction KeyDown qui me permet de savoir quelle touche du clavier l'utilisateur a appuyé.
J'ai créé un jeu et je voudrais être capable d'utiliser les deux touches Shift (majuscule gauche et droite). Le problème, c'est qu'ils ont tous les deux le même KeyCode, même chose pour certaines autres touches comme ALT et CTRL.
Comment détecter lequel des deux Shift l'utilisateur appuie-il ?
Merci d'avance.
¯¯¯¯¯¯¯¯¯¯¯¯ Cordialement Daniel - Z
Salut
shift est le second argument de l'évenement Keydown et indique par
codification binaire si une des touches SHIFT, CTRL ou ALT est pressée
If shift and vbctrlMask <> 0 (Code si CTRL appuyé)
if shift and vbaltMask <> 0 (code si ALT est appuyé)
if shift and vbShiftMask <> 0 (code si SHIFT est appuyé)
Chacune des trois options n'élimine pas les autres
Alain Cotterot
Daniel - Z <NOSPAM_daniel.z@laposte.net> a écrit dans le message :
#xnlZIPnDHA.2080@TK2MSFTNGP10.phx.gbl...
Bonjour.
J'utilise la fonction KeyDown qui me permet de savoir quelle touche du
clavier l'utilisateur a appuyé.
J'ai créé un jeu et je voudrais être capable d'utiliser les deux touches
Shift (majuscule gauche et droite). Le problème, c'est qu'ils ont tous les
deux le même KeyCode, même chose pour certaines autres touches comme ALT et
CTRL.
Comment détecter lequel des deux Shift l'utilisateur appuie-il ?
shift est le second argument de l'évenement Keydown et indique par codification binaire si une des touches SHIFT, CTRL ou ALT est pressée
If shift and vbctrlMask <> 0 (Code si CTRL appuyé)
if shift and vbaltMask <> 0 (code si ALT est appuyé)
if shift and vbShiftMask <> 0 (code si SHIFT est appuyé)
Chacune des trois options n'élimine pas les autres
Alain Cotterot
Daniel - Z a écrit dans le message : # Bonjour.
J'utilise la fonction KeyDown qui me permet de savoir quelle touche du clavier l'utilisateur a appuyé.
J'ai créé un jeu et je voudrais être capable d'utiliser les deux touches Shift (majuscule gauche et droite). Le problème, c'est qu'ils ont tous les deux le même KeyCode, même chose pour certaines autres touches comme ALT et CTRL.
Comment détecter lequel des deux Shift l'utilisateur appuie-il ?
Merci d'avance.
¯¯¯¯¯¯¯¯¯¯¯¯ Cordialement Daniel - Z
jmn
l'api GetKeyState (win32) permet de retrouver l'état d'une touche du clavier (y compris les shifts droit et gauche). si l'on considère qu'entre le moment où l'évènement form_keydown est invoqué et les premières instructions de la procèdures la touche sera toujours enfoncée, alors un appel à cette API devrait faire l'affaire.
l'api GetKeyState (win32) permet de retrouver l'état d'une touche du clavier
(y compris les shifts droit et gauche). si l'on considère qu'entre le moment
où l'évènement form_keydown est invoqué et les premières instructions de la
procèdures la touche sera toujours enfoncée, alors un appel à cette API
devrait faire l'affaire.
l'api GetKeyState (win32) permet de retrouver l'état d'une touche du clavier (y compris les shifts droit et gauche). si l'on considère qu'entre le moment où l'évènement form_keydown est invoqué et les premières instructions de la procèdures la touche sera toujours enfoncée, alors un appel à cette API devrait faire l'affaire.
Daniel - Z
Bonjour.
Mais cela me permet-il de différencier lequel des 2 Shift a été pressé ? Si oui, un exemple plus concret peut-être ?
Désolé de mon inexpérience. Merci d'avance.
¯¯¯¯¯¯¯¯¯¯¯¯ Cordialement Daniel - Z
Bonjour.
Mais cela me permet-il de différencier lequel des 2 Shift a été pressé ? Si oui, un exemple plus concret peut-être ?
Private Declare Function GetKeyState _ Lib "user32" _ ( _ ByVal nVirtKey As Long) _ As Integer
Private Const VK_LSHIFT = &HA0 Private Const VK_RSHIFT As Long = &HA1 Private Const VK_LCONTROL As Long = &HA2 Private Const VK_RCONTROL As Long = &HA3 Private Const VK_LMENU As Long = &HA4 Private Const VK_RMENU As Long = &HA5
Function GetPressedKey() As String
Dim key As Long For key = VK_LSHIFT To VK_RMENU
' Vérifie l'état de la clé ' Si le bit le fort est à 1 alors la clé est enfoncé ' Si le bit le plus faible est à 1 alors la touche ' alors la touche est activé (comme le CAPSLOCK par exemple) If ((GetKeyState(key) And &H80000000) = &H80000000) Then
' On vérifie quelle clé est enfoncée Select Case key Case VK_LSHIFT GetPressedKey = _ GetPressedKey & "Left Shift" & vbNewLine Case VK_RSHIFT GetPressedKey = _ GetPressedKey & "Right Shift" & vbNewLine Case VK_LCONTROL GetPressedKey = _ GetPressedKey & "Left Control" & vbNewLine Case VK_RCONTROL GetPressedKey = _ GetPressedKey & "Right Control" & vbNewLine Case VK_LMENU GetPressedKey = _ GetPressedKey & "Left Alt" & vbNewLine Case VK_RMENU GetPressedKey = _ GetPressedKey & "Right Alt" & vbNewLine End Select End If
Next key
If (LenB(GetPressedKey) > 0) Then GetPressedKey = Left$(GetPressedKey, Len(GetPressedKey) - 2) Else GetPressedKey = "Appuyer sur les touches" End If
End Function
Private Sub Form_Load() Call Me.Move(Me.Left, Me.Top, 5000, 5000) Call Label1.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight) Timer1.Interval = 50 Timer1.Enabled = True End Sub
Private Sub Form_Resize() Call Label1.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight) End Sub
Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False End Sub
Private Sub Timer1_Timer() Label1.Caption = GetPressedKey End Sub '***
Private Declare Function GetKeyState _
Lib "user32" _
( _
ByVal nVirtKey As Long) _
As Integer
Private Const VK_LSHIFT = &HA0
Private Const VK_RSHIFT As Long = &HA1
Private Const VK_LCONTROL As Long = &HA2
Private Const VK_RCONTROL As Long = &HA3
Private Const VK_LMENU As Long = &HA4
Private Const VK_RMENU As Long = &HA5
Function GetPressedKey() As String
Dim key As Long
For key = VK_LSHIFT To VK_RMENU
' Vérifie l'état de la clé
' Si le bit le fort est à 1 alors la clé est enfoncé
' Si le bit le plus faible est à 1 alors la touche
' alors la touche est activé (comme le CAPSLOCK par exemple)
If ((GetKeyState(key) And &H80000000) = &H80000000) Then
' On vérifie quelle clé est enfoncée
Select Case key
Case VK_LSHIFT
GetPressedKey = _
GetPressedKey & "Left Shift" & vbNewLine
Case VK_RSHIFT
GetPressedKey = _
GetPressedKey & "Right Shift" & vbNewLine
Case VK_LCONTROL
GetPressedKey = _
GetPressedKey & "Left Control" & vbNewLine
Case VK_RCONTROL
GetPressedKey = _
GetPressedKey & "Right Control" & vbNewLine
Case VK_LMENU
GetPressedKey = _
GetPressedKey & "Left Alt" & vbNewLine
Case VK_RMENU
GetPressedKey = _
GetPressedKey & "Right Alt" & vbNewLine
End Select
End If
Next key
If (LenB(GetPressedKey) > 0) Then
GetPressedKey = Left$(GetPressedKey, Len(GetPressedKey) - 2)
Else
GetPressedKey = "Appuyer sur les touches"
End If
End Function
Private Sub Form_Load()
Call Me.Move(Me.Left, Me.Top, 5000, 5000)
Call Label1.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight)
Timer1.Interval = 50
Timer1.Enabled = True
End Sub
Private Sub Form_Resize()
Call Label1.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
Label1.Caption = GetPressedKey
End Sub
'***
Merci de poster les réponses au groupe afin d'en faire profiter à tous
"jmn" <jmn@truc.com> wrote in message
news:Of7dMGXnDHA.1084@tk2msftngp13.phx.gbl...
l'api GetKeyState (win32) permet de retrouver l'état d'une touche du
clavier
(y compris les shifts droit et gauche). si l'on considère qu'entre le
moment
où l'évènement form_keydown est invoqué et les premières instructions de
la
procèdures la touche sera toujours enfoncée, alors un appel à cette API
devrait faire l'affaire.
Private Declare Function GetKeyState _ Lib "user32" _ ( _ ByVal nVirtKey As Long) _ As Integer
Private Const VK_LSHIFT = &HA0 Private Const VK_RSHIFT As Long = &HA1 Private Const VK_LCONTROL As Long = &HA2 Private Const VK_RCONTROL As Long = &HA3 Private Const VK_LMENU As Long = &HA4 Private Const VK_RMENU As Long = &HA5
Function GetPressedKey() As String
Dim key As Long For key = VK_LSHIFT To VK_RMENU
' Vérifie l'état de la clé ' Si le bit le fort est à 1 alors la clé est enfoncé ' Si le bit le plus faible est à 1 alors la touche ' alors la touche est activé (comme le CAPSLOCK par exemple) If ((GetKeyState(key) And &H80000000) = &H80000000) Then
' On vérifie quelle clé est enfoncée Select Case key Case VK_LSHIFT GetPressedKey = _ GetPressedKey & "Left Shift" & vbNewLine Case VK_RSHIFT GetPressedKey = _ GetPressedKey & "Right Shift" & vbNewLine Case VK_LCONTROL GetPressedKey = _ GetPressedKey & "Left Control" & vbNewLine Case VK_RCONTROL GetPressedKey = _ GetPressedKey & "Right Control" & vbNewLine Case VK_LMENU GetPressedKey = _ GetPressedKey & "Left Alt" & vbNewLine Case VK_RMENU GetPressedKey = _ GetPressedKey & "Right Alt" & vbNewLine End Select End If
Next key
If (LenB(GetPressedKey) > 0) Then GetPressedKey = Left$(GetPressedKey, Len(GetPressedKey) - 2) Else GetPressedKey = "Appuyer sur les touches" End If
End Function
Private Sub Form_Load() Call Me.Move(Me.Left, Me.Top, 5000, 5000) Call Label1.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight) Timer1.Interval = 50 Timer1.Enabled = True End Sub
Private Sub Form_Resize() Call Label1.Move(0, 0, Me.ScaleWidth, Me.ScaleHeight) End Sub
Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False End Sub
Private Sub Timer1_Timer() Label1.Caption = GetPressedKey End Sub '***
ah oui j'oubliais. l'exemple est tiré d'un message anglophone que j'ai trouvé. :O) bon. voilà.
Daniel - Z
Bonjour.
Merci pour cet exemple, il devrait être d'une grande utilité. Par contre j'ai constaté que le code était assez long. Je vais tout tester, et si j'ai bien regarder ce code, lors de l'appui sur l'un des Shift on devrait voir apparaître le nom du Shift dans le label, ce qui confirmerait donc la détection des Shift gauche et droit. Je ne suis présentement pas à mon bureau de travail, je testerai donc plutard.
Merci encore.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Cordialement Daniel - Z
Bonjour.
Merci pour cet exemple, il devrait être d'une grande utilité.
Par contre j'ai constaté que le code était assez long.
Je vais tout tester, et si j'ai bien regarder ce code, lors de l'appui sur l'un des Shift on devrait voir apparaître le nom du Shift dans le label, ce qui confirmerait donc la détection des Shift gauche et droit. Je ne suis présentement pas à mon bureau de travail, je testerai donc plutard.
Merci pour cet exemple, il devrait être d'une grande utilité. Par contre j'ai constaté que le code était assez long. Je vais tout tester, et si j'ai bien regarder ce code, lors de l'appui sur l'un des Shift on devrait voir apparaître le nom du Shift dans le label, ce qui confirmerait donc la détection des Shift gauche et droit. Je ne suis présentement pas à mon bureau de travail, je testerai donc plutard.
Merci encore.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Cordialement Daniel - Z
Zoury
Salut Daniel! :O)
: Par contre j'ai constaté que le code était assez long.
Yep. et la seule ligne reellement utile dans ton cas se resume a ceci :
<non teste> '*** Debug.Print "Shift Gauche : " & _ (GetKeyState(VK_LSHIFT) And &H80000000) = &H80000000 Debug.Print "Shift Droit : " & _ (GetKeyState(VK_RSHIFT) And &H80000000) = &H80000000 '***
le reste n'etant que pour demontrer le fonctionnement...