Problème de récupération de vbKeyCode/vbKeyAscii

Résolu
Signaler
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005
-
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005
-
Bonjour,



Je travaille sur un programme pour les aveugles et donc avec une
synthèse vocale. J'ai une textBox mutiligne et je dois récupérer
lorsque l'utilisateur appuye sur différente touche.



J'utilise un Form_KeyDown



if (KeyCode = vbKeyReturn) then

KeyCode = 0

action1()

end if



if (KeyCode = vbKeyUp) then

KeyCode = 0

action2()

end if



if (KeyCode = vbKeyDown) then

KeyCode = 0

action3()

end if



cela marche très bien pour vbKeyReturn mais pas pour Up et Down car ça
effectue qd même l'action flèche bas et haut sur la txtBox multiligne
alors que j'ai mis KeyCode = 0



quelqu'un peut m'aider???

et m'expliquer la différence entre Form_KeyPress, Form_KeyUp...



Merci d'avance

13 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
il ne faut pas mélanger le KeyCode et le KeyAscii

ceci peut t'aider :
crée un nouveau projet,
Form Keypreview True
2 TxtBox (1 & 2) multiligne

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode Case 37: Text2 Text2 & vbCrLf & "[LEFT]": KeyCode 0 Case 38: Text2 Text2 & vbCrLf & "[UP]": KeyCode 0 Case 39: Text2 Text2 & vbCrLf & "[RIGHT]": KeyCode 0 Case 40: Text2 Text2 & vbCrLf & "[DOWN]": KeyCode 0
End Select
End Sub


Private Sub Text1_KeyPress(KeyAscii As Integer)
Text2 = Text2 & vbCrLf & KeyAscii
KeyAscii = 0
End Sub

PCPT
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Bonjour
alors si j ai bien compris lorsque l utilisateur appuie sur une touche, la synthese vocale dit cette touche.
Si c est bien sa je ne me limiterai pas a un textbox mais je recupererai chaque touche presser en lui attribuant le son specifique.
Comme sa, ou qu on soit dans le systeme, la synthese vocale marcherai

Sinon j utiliserai plutot

Private Sub Text1_KeyPress(KeyAscii As Integer)
select case keyascii ' evite de mettre plein de if ... then

case asc(a) 'si la touche a est pressée
action1 'l action a se declenche

case asc(b) 'si la touche b est pressée
action2 'l action a se declenche

etc...


End Sub

A toi de voir
a+
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005

non la synthèse vocale permet de lire le texte contenu dans les textBox



d'autre part j'ai bien pensé à votre solution mais il y a plusieurs
textBox donc je préfèrerai récupérer les appuis sur les touches à tout
moment



sinon je ne comprends pas pourquoi ça marche pour la touche entrée
(n'effectue pas l'action d'entrée puisque le texte de ma textBox est
selectionné et la touche entrée devrait tout effacer hors cela ne le
fait pas ) alors que pour les touches up et down ça ne marche pas ça va
à la ligne du dessus



sinon ok pour le select !!!
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Je ne comprend pas a koi sa sert d appuyer sur ces touches si le prog permet de lire le texte mais bon je cherche une solution la !
a tte
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005

bon je vais expliquer un peu plus en fait c un programme
d'apprentissage d'un clavier donc le texte permet d'expliquer ou sont
les touches et moi je dois récupérer les touches pour voir si c bon



Merci de passer du temps pour trouver une solution !!!
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

C re moi
J ai trouver le probleme
Tout d abord pour repondre a ta question precedente, keypress ce declenche quand on appuie sur une touche et keydown, quand une touche est enfoncée et donc keyup quand elle est relachée

Le probleme est que ces methodes ne recuperent pas les touches des fleches tout simplement.C est pourkoi l action ne se produit pas et donc le keycode=0 ne marche pas

voila !
a+
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005

alors je change ma question comment récupérer l'appuie sur les touches flèches ?????
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008

Solution : API windows

' Appel Pour la detection de la touche activée
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Private Sub Timerkey_Timer()
kp = 256
sk = " "


For t = 1 To 255
If GetAsyncKeyState(t) = -32767 Then
kp = t
End If
Next t

'kp correspond a la touche pressée
If kp 37 Then kp "[LEFT]"If kp 38 Then kp "[UP]"If kp 39 Then kp "[RIGHT]"If kp 40 Then kp "[DOWN]"

end sub

Voila le timer est fixé a 1ms en faite sa verifie l etat des touches toutes les millisecondes j aime pas trop cette methode mais j ai trouvé que sa
Je te laisse adapté le code

a+
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
bonsoir,
Form_Load :
Me.KeyPreview = True

çà devrait t'aider...
PCPT
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005

pour adess00, merci d'avoir chercher tout ça en effet ta fonction
permet de récupérer toutes les touches mais pas de supprimer l'action
de la touche en effet moi je veux que lorsqu'il touche sur la touche
flèche haut je le detecte et que cela ne fasse pas l'action flèche haut
d'où mon KeyCode = 0



pour pcpt, j'ai déjà mis cette option à True grâce à d'autre message sur ce sujet dans ce forum d'ailleurs





qq'1 à une autre idée???



Merci d'avance
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005

Merci beaucoup c exactement ce que je voulais



je rajoute juste certaines touches qui ne sont pas des codes Ascii !!!



Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case KeyCode

Case vbKeyShift: Text2 Text2 & vbCrLf & "[MAJ]": KeyCode 0

Case vbKeyControl: Text2 Text2 & vbCrLf & "[CTRL]": KeyCode 0

Case vbKeyMenu: Text2 Text2 & vbCrLf & "[ALT]": KeyCode 0

Case vbKeyPause: Text2 Text2 & vbCrLf & "[PAUSE]": KeyCode 0

Case vbKeyCapital: Text2 Text2 & vbCrLf & "[VERR.MAJ]": KeyCode 0

Case vbKeyPageUp: Text2 Text2 & vbCrLf & "[PAGEUP]": KeyCode 0

Case vbKeyPageDown: Text2 Text2 & vbCrLf & "[PAGEDOWN]": KeyCode 0

Case vbKeyEnd: Text2 Text2 & vbCrLf & "[FIN]": KeyCode 0

Case vbKeyHome: Text2 Text2 & vbCrLf & "[ORIGINE]": KeyCode 0

Case vbKeyLeft: Text2 Text2 & vbCrLf & "[LEFT]": KeyCode 0

Case vbKeyUp: Text2 Text2 & vbCrLf & "[UP]": KeyCode 0

Case vbKeyRight: Text2 Text2 & vbCrLf & "[RIGHT]": KeyCode 0

Case vbKeyDown: Text2 Text2 & vbCrLf & "[DOWN]": KeyCode 0

Case vbKeyPrint: Text2 Text2 & vbCrLf & "[IMPRECRAN]": KeyCode 0 ' ne marche pas

Case vbKeySnapshot: Text2 Text2 & vbCrLf & "[INSTAN]": KeyCode 0 'ne marche pas

Case vbKeyInsert: Text2 Text2 & vbCrLf & "[INSERT]": KeyCode 0

Case vbKeyDelete: Text2 Text2 & vbCrLf & "[SUPPR]": KeyCode 0

Case 91: Text2 Text2 & vbCrLf & "[WINDOWSD]": KeyCode 0 'execute qd même

Case 92: Text2 Text2 & vbCrLf & "[WINDOWSG]": KeyCode 0 'execute qd même

Case 93: Text2 Text2 & vbCrLf & "[CONTEXTE]": KeyCode 0 'execute qd même

Case vbKeyNumlock: Text2 Text2 & vbCrLf & "[VERR.NUM]": KeyCode 0

Case 145: Text2 Text2 & vbCrLf & "[ARRET DEFIL]": KeyCode 0

Case vbKeyF1: Text2 Text2 & vbCrLf & "[F1]": KeyCode 0

Case vbKeyF2: Text2 Text2 & vbCrLf & "[F2]": KeyCode 0

Case vbKeyF3: Text2 Text2 & vbCrLf & "[F3]": KeyCode 0

Case vbKeyF4: Text2 Text2 & vbCrLf & "[F4]": KeyCode 0

Case vbKeyF5: Text2 Text2 & vbCrLf & "[F5]": KeyCode 0

Case vbKeyF6: Text2 Text2 & vbCrLf & "[F6]": KeyCode 0

Case vbKeyF7: Text2 Text2 & vbCrLf & "[F7]": KeyCode 0

Case vbKeyF8: Text2 Text2 & vbCrLf & "[F8]": KeyCode 0

Case vbKeyF9: Text2 Text2 & vbCrLf & "[F9]": KeyCode 0

Case vbKeyF10: Text2 Text2 & vbCrLf & "[F10]": KeyCode 0

Case vbKeyF11: Text2 Text2 & vbCrLf & "[F11]": KeyCode 0

Case vbKeyF12: Text2 Text2 & vbCrLf & "[F12]": KeyCode 0



End Select

End Sub



Private Sub Form_KeyPress(KeyAscii As Integer)

Text2 = Text2 & vbCrLf & KeyAscii

KeyAscii = 0

End Sub
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
ok

et pour que tu n'aies pas à ajouter "keycode=0" à chaque fois, tu peux le mettre juste en sortie de End Select

et pour information aussi, pour le keypress, si tu veux la touche et non son code :
Text2 = Text2 & vbCrLf & Asc(KeyAscii)

bon courage ;)
PCPT
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005

oui c vrai pour le KeyCode = 0

sinon pour le reste le code me va très bien mais merci pour l'info