agnescol
Messages postés32Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention13 septembre 2005
-
27 juil. 2005 à 16:36
agnescol
Messages postés32Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention13 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...
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 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
adess00
Messages postés261Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention27 septembre 20081 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
agnescol
Messages postés32Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention13 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
agnescol
Messages postés32Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention13 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 !!!
adess00
Messages postés261Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention27 septembre 20081 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
adess00
Messages postés261Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention27 septembre 20081 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
agnescol
Messages postés32Date d'inscriptionmercredi 20 avril 2005StatutMembreDernière intervention13 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