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

Résolu
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005 - 27 juil. 2005 à 16:36
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005 - 28 juil. 2005 à 17:47
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

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
28 juil. 2005 à 11:16
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
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008
27 juil. 2005 à 16:48
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+
0
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005
27 juil. 2005 à 16:57
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 !!!
0
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008
27 juil. 2005 à 17:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005
27 juil. 2005 à 18:00
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 !!!
0
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008
27 juil. 2005 à 18:05
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+
0
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005
27 juil. 2005 à 18:07
alors je change ma question comment récupérer l'appuie sur les touches flèches ?????
0
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008
27 juil. 2005 à 18:25
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+
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
28 juil. 2005 à 03:49
bonsoir,
Form_Load :
Me.KeyPreview = True

çà devrait t'aider...
PCPT
0
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005
28 juil. 2005 à 10:39
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
0
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005
28 juil. 2005 à 17:24
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
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
28 juil. 2005 à 17:44
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
0
agnescol Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 13 septembre 2005
28 juil. 2005 à 17:47
oui c vrai pour le KeyCode = 0

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