OVH Cloud OVH Cloud

KeyPress.. KeyDown .. Keyup

7 réponses
Avatar
Curl
Bonjour,

Je me bats toujours avec des simples textbox..

Sur un Textbox et son évenement Textbox_KeyDown, J'intercepte l'appui
sur la fleche droite (keycode = vbKeyRight)

Je voudrais alors insérer un "A" , j'écris donc
call Textbox_Keypress(Asc("A"))

Je rentre bien dans Keypress avec la bonne valeur de Keyascii , mais à
la sortie (du Keypress ou du KeyDown), je n'ai pas de caractère
affiché ..

J'ai tenté avec _KeyUp sans succès (subtil le gascon .)

Pourquoi ? et quelle est la façon correcte de procéder .

Je vous remercie pour vos conseils.
Pierre.

7 réponses

Avatar
Gloops
Bonjour,

Et pourquoi pas TextBox.Text = TextBox.Text + "A" ?

Si c'est à l'intérieur du texte, que se trouve la sélection et qu'il
faut insérer le A, s'intéresser aux propriétés SelLength, SelStart,
SelText. L'aide expliquera ça bien mieux que moi.

Les simulations de touches, c'est quand vraiment on ne peut pas autrement.
___________________________________
Curl a écrit, le 12/10/2004 17:12 :

Bonjour,

Je me bats toujours avec des simples textbox..

Sur un Textbox et son évenement Textbox_KeyDown, J'intercepte l'appui
sur la fleche droite (keycode = vbKeyRight)

Je voudrais alors insérer un "A" , j'écris donc
call Textbox_Keypress(Asc("A"))

Je rentre bien dans Keypress avec la bonne valeur de Keyascii , mais à
la sortie (du Keypress ou du KeyDown), je n'ai pas de caractère
affiché ..

J'ai tenté avec _KeyUp sans succès (subtil le gascon .)

Pourquoi ? et quelle est la façon correcte de procéder .

Je vous remercie pour vos conseils.
Pierre.



Avatar
Curl
Gloops a tapoté :
| Et pourquoi pas TextBox.Text = TextBox.Text + "A" ?

Bonjour, et merci de votre réponse..
J'avais envoyé un post d'annulation, .. Mais je ne sais pas si
celui-ci est pris en compte.
..
Avatar
Curl
Bonjour,

Je ne sais pas si mes questions ont leur place sur ce forum, ou si je
devrais plutot les poser sur un site consacré à VB et à la
programmation.

J'ai un tableau de 3 texbox de 6 caractères max chacun, représentant
une "touche" (physiquement existante sur un périphérique). il est
possible d'éditer le nom de cette touche.
Voici la disposition sous VB
****** < textbox(0)
****** < textbox(1)
****** < textbox(2)

Je cherche à me déplacer à l'aide des flèches dans ces textbox.
- Fleche gauche, remonte à la textbox précédente si curseur au debut
de ligne. OK
- Fleche droite passe à la textbox suivante si curseur en fin de
ligne. OK
Et
- Fleche haut passe à la textbox précédente
- Fleche bas passe à la textbox suivante.

Ces deux dernières "commandes" , ne fonctionnent pas.. j'ai bien
l'évenement Texbox_gotfocus généré mais sur le mauvais textbox..

Voici le code :

Private Sub Text1_GotFocus(Index As Integer)
Debug.Print Index
End Sub

Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift
As Integer)
' Used to intercept special keys
Dim curpos As Integer

curpos = Text1(Index).SelStart
Select Case KeyCode
Case vbKeyRight
If (curpos + 1) = Text1(Index).MaxLength Then ' Next Cells
If Index Mod 3 = 2 Then Exit Sub ' Can't go
lower
Text1(Index + 1).SetFocus
Text1(Index + 1).SelStart = 0
End If
Case vbKeyLeft
If curpos = 0 Then
If Index Mod 3 = 0 Then Exit Sub 'Can't go higher
Text1(Index - 1).SetFocus
Text1(Index - 1).SelStart = Text1(Index - 1).MaxLength
End If
Case vbKeyDown
If Index Mod 3 = 2 Then Exit Sub ' Can't go lower
Text1(Index + 1).SetFocus
Text1(Index + 1).SelStart = curpos
Case vbKeyUp
If Index Mod 3 = 0 Then Exit Sub 'Can't go higher
Text1(Index - 1).SetFocus
Text1(Index - 1).SelStart = curpos
End Select

End Sub

Pourquoi ??

Merci pour vos conseils.
Avatar
Curl
Curl a tapoté :
| - Fleche haut passe à la textbox précédente
| - Fleche bas passe à la textbox suivante.
|
| Ces deux dernières "commandes" , ne fonctionnent pas.. j'ai bien
| l'évenement Texbox_gotfocus généré mais sur le mauvais textbox..

Petite précision, cela fonctionne sur l'événement Text1_Keyup (pas
exactement ce que je voudrais avoir) mais pas sur _KeyDown.
Avatar
Gloops
Bonjour,

J'ai l'impression que ça pourrait aider d'expliquer ce test :
> If Index Mod 3 = 2 Then Exit Sub ' Can't go lower

Je trouve que si on n'est pas plongé dans le projet ça n'est pas si
intuitif que ça.
___________________________________
Curl a écrit, le 13/10/2004 11:11 :

Case vbKeyDown
If Index Mod 3 = 2 Then Exit Sub ' Can't go lower
Text1(Index + 1).SetFocus
Text1(Index + 1).SelStart = curpos
Case vbKeyUp
If Index Mod 3 = 0 Then Exit Sub 'Can't go higher
Text1(Index - 1).SetFocus
Text1(Index - 1).SelStart = curpos
End Select


Avatar
Curl
Gloops a tapoté :
| Bonjour,

Bonjour
merci d'avoir jeté un oeil !! :o)
Finalement, j'ai résolu mon problème, mais ai tellement remanié le
code depuis...
Je ne m'occupe plus de Keycode = vbkeyup et keycode = vbkeydown dans
l'evenement _keydown, mais dans l'enevement _keyup


| J'ai l'impression que ça pourrait aider d'expliquer ce test :
| > If Index Mod 3 = 2 Then Exit Sub ' Can't go lower

Pour répondre à cette question : Il ya en fait 24 touches de la façon
suivante ****** représentant Text1 de 6 caractères max
****** ****** ******
****** ****** ****** etc..
****** ****** ******

Le test me permet de savoir si je suis sur la première ligne d'une
touche (Index mod 3 =0) ou la dernière ligne d'une touche (Index mod 3
= 2), Dans ces deux cas, je ne gère pas le déplacement du curseur.
(pour ne pas passer à la touche d'à coté)


En tout cas en revenant en arrière .. le problème reste...
Voici le pourquoi du comment : Par exemple je me trouve sur la ligne
1 d'une touche
****** <- je me trouve ici (Index = 0)
******
******

Je mets un point d'arret sur la ligne suivante :

| Case vbKeyDown
| If Index Mod 3 = 2 Then Exit Sub ' Can't go lower
| Text1(Index + 1).SetFocus (<----)
| Text1(Index + 1).SelStart = curpos

Je change bien le focus, donc passe bien à la ligne suivante Focus
sur Text1(1)
******
****** <- je me trouve maintenant ici
******


Mais une fois sorti de l'evenement _Keydown ,
la textbox "réagit" sur la touche flèche bas, et le focus est replacé
sur la première ligne

****** <- je me retrouve de nouveau ici
******
******

Je devrais m'en sortir en ajoutant apres le .selstart, une valeur
(nulle ?) à Keycode, pour que la textbox ne réagisse pas.
Un peu comme si je mettais keyascii = 0 pour empecher l'ecriture d'une
lettre dans le textbox à l'evenement Keypress (Suis-je clair ?)

Evidemment .. n'étant pas plongé dans le code, je me doute que cela
reste un peu confus..
j'aurai du faire un mini-projet et le mettre en ligne cela aurait été
plus clair.

En tout cas Merci de m'avoir lu et répondu !!
Avatar
Gloops
Bon, si j'ai bien compris, chaque touche est interprétée de trois façons
différentes selon l'état du clavier (en fait selon la valeur d'une
variable j'imagine).

Si j'ai bien compris aussi, maintenant ça marche, tant mieux.

(j'ai lu en diagonale, hein)