Evenement Keydown

Messages postés
158
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
- - Dernière réponse : cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 3 avril 2011 à 12:19
Bonjour à tous,

Je suis en train de développer un mini mario kart avec les composants form windows (pas terrible je sais mais bon...)

J'ai un problème au niveau de l’évènement KeyDown
quand l'on appuis sur la touche Keys.UP le kart avance bien et sur les fleche gauche droite le kart tourne bien mais des que l'on tourne le kart n'avance plus.

Il faut lacher la fleche du haut puis ré-appuyer pour avancer.

Moi je voudrai que lorsque j'appuis sur la fleche du haut pour avancer le kart avance toujours même quant on tourne.

Voila
Afficher la suite 

2 réponses

Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
59
0
Merci
Salut

Oui, c'est normal, le KeyDown (comme ses frères) ne peuvent retourner qu'une seule touche = la dernière.
Pour connaitre les touches enfoncées en même temps (usage peu classique), il faut scanner les codes de touche par les API comme GetAsyncKeyState

Exemple VB6 (mais fonctionnel en .Net) fourni avec http://logiciel.codes-sources.com/logiciels/API-Guide-197.aspx :
Function GetPressedKey() As String
    For Cnt = 32 To 128
        'Get the keystate of a specified key
        If GetAsyncKeyState(Cnt) <> 0 Then
            GetPressedKey = Chr$(Cnt)
            Exit For
        End If
    Next Cnt
End Function

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
59
0
Merci
Dans ton cas, puisque tu n'as qu'un nombre limité de touches à scruter, tu pourrais créer des fonctions comme ça :
Function IsUpKeyPressed() As Boolean
    IsUpKeyPressed = CBool(GetAsyncKeyState(vbKeyUp) <> 0)
End Function
Function IsDownKeyPressed() As Boolean
    IsDownKeyPressed = CBool(GetAsyncKeyState(vbKeyDown) <> 0)
End Function
etc ...
Commenter la réponse de cs_Jack