phoenix591
Messages postés32Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention18 mai 2012
-
11 oct. 2008 à 19:33
phoenix591
Messages postés32Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention18 mai 2012
-
12 oct. 2008 à 10:15
Salut à toutes et à tous,
[file:///D:/Affichage%20ALD/clavier%20virtuel%20avec%20click/Mon_clavier_virtuel.zip ]
Dans le cadre d'une application devant tourner sur un écran tactile, j'ai réalisé un petit programme de clavier virtuel (série de connandbutton avec des index correspondants aux codages ascii).
J'ai malgré tout un petit problème: il y a deux modes de fonctionnement soit une saisie sur l'écran tactile à l'aide du clavier virtuel (utilisation de la commande click (index as intéger) et traitement de la valeur d'index) et un mode de saisie au clavier standard (utilisation de Form_KeyDown(KeyCode As Integer, Shift As Integer)), c'est au passage entre les deux fonctionnalités qu'il y a un petit bug.
Le bug vient lorsque l'on a effectué une frappe au clavier virtuel et que l'on appuis sur la touche espace du clavier standard, là l'espace est pris en compte mais lorsque l'on relâche le touche il y a répétition du dernier carractére frappé sur le clavier virtuel.
Ce bug est du au fait que la touche "virtuele" reste active, que la private sub qui gére le clavier à pris le contrôle et que lors du retour de scrutation le programme considére que le clavier virtuel a été utilisé et donc répéte la frappe.
Comment puis je dé-sélectionner la touche virtuel (command button) pour que le programme ne considére pas cette touche comme active une deuxiéme fois?
J'ai été un peut long mais je n'ai pas arrivé à copier mon programme sur le forum, cela aurait été plus simple à comprendre.
Merci de passer un peu de temps sur mon problème.
Je peux envoyer le programme si besoin et si vous me décrivez la procédure (ou en MP)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 oct. 2008 à 21:31
Bonsoir,
n'ai lu qu'en diagonale.
Une chose est certaine : lorsque tu donnes le ficus à la textbox, l'évènement Form_KeyDown cesse d'être opérationne...
Pourquoi ne pas alors tout simplment utiliser une variable booléenne (True/False), lui donner quand et où tu le souhaites une de ces 2 valeurs et lui associer la valeur vde la propriété KeyPreview de ta Form.... non ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 oct. 2008 à 20:58
Bonsoir,
tu as été un peu long, mais bien inutilement ...
Où est dinc ton code ? Mets-le ici par copier coller (pas besoin d'un lune :)
Nous n'avons besoin que de voir le code de chacun des évènements d'un bouton (puisque tu as un groupe de contrôles indexés, apparemment....), ainsi que celui gérant les évènements de ta Form. Le reste ne nous regarde pas .
phoenix591
Messages postés32Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention18 mai 2012 11 oct. 2008 à 21:06
Probléme résolu,
J'ai tout simplement placer un textbox dans ma feuille et à chaque fin de traitement je mets le focus sur ce textbox (setfocus), pas élégant mais cela fonctionne dans tous les cas.
Salut, Phoenix
Vous n’avez pas trouvé la réponse que vous recherchez ?
phoenix591
Messages postés32Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention18 mai 2012 11 oct. 2008 à 21:15
Salut jmfmarques,
Pas de problème, pas de secret, je n'ai tout simplement pas réussi à copier mon fichier dans le message.
Si tu veux ci dessous le copier / coller demandé, si tu trouve mieux que le setfocus pour ne pas avoir de problème avec la touche espace (la seule qui provoque le bug), je suis preneur.
Au fait, si je mets un point d'arret dans le code le bug ne se produit pas, bizzare, vous avez dit bizzare?
Salut et bon week end.
Private Sub Form_Load() 'executer au chargement de l'écran
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'utilisation des entrées du clavier
Text1.Text = KeyCode
Select Case KeyCode
Case 8: Clavier_vir_Supp '8
Case 16: Clavier_vir_shift
Case 18: Clavier_vir_altgra (Index)
Case 20: Clavier_vir_Maj
Case 222: Type_clavier_virtuel.Text = Type_clavier_virtuel.Text + "²"
Case vbKeyDelete: Clav_virtuel_Del
Case vbKeyTab: Type_clavier_virtuel.Text = Type_clavier_virtuel.Text + " "
Case 32: Type_clavier_virtuel.Text = Type_clavier_virtuel.Text + " "
'Case vbKeyReturn: Clav_virtuel_val_Click
Case vbKeyEscape: Clavier_virtuel_Echap_Click
Case Else: Retour_Clavier_Virtuel (KeyCode)
End Select
Text1.SetFocus
End Sub
Private Sub Clavier_virtuel_car_click(Index As Integer) 'DragOver(Index As Integer, Source As Control, X As Single, Y As Single, State As Integer) 'Utilisation des entrées au clavier virtuel
Retour_Clavier_Virtuel (Index)
Text1.SetFocus
End Sub
Private Sub Retour_Clavier_Virtuel(car As Integer)
Dim Caractére As String
Beep
Text1.Text = car
If Clavier_virtuel_altgra(0).BackColor = &HFFFF& Then
Select Case car
Case 41: Caractére = 93
Case 36: Caractére = 186
Case 61: Caractére = 125
Case 50: Caractére = 126
Case 51: Caractére = 35
Case 52: Caractére = 123
Case 53: Caractére = 91
Case 54: Caractére = 124
Case 55: Caractére = 96
Case 56: Caractére = 92
Case 57: Caractére = 94
Case 48: Caractére = 64
Case 69: Caractére = 128
Case 176: Caractére = 93
Case 43: Caractére = 125
Case 186: Caractére = 164
Case 219: Caractére = 93
Case 187: Caractére = 125
Case Else: Caractére = ""
End Select
Else
Select Case car
Case 65 To 90:
If (Clavier_virtuel_Maj(0).BackColor = &HFFFF&) Then
Caractére = car
Else
Caractére = car + 32
End If
Case 48 To 57
If (Clavier_virtuel_Maj(0).BackColor = &HFFFF&) Then
Caractére = car
Else
Select Case car
Case 48: Caractére = 224
Case 49: Caractére = 38
Case 50: Caractére = 233
Case 51: Caractére = 34
Case 52: Caractére = 39
Case 53: Caractére = 40
Case 54: Caractére = 45
Case 55: Caractére = 232
Case 56: Caractére = 95
Case 57: Caractére = 231
End Select
End If
Case Else
If (Clavier_virtuel_Maj(0).BackColor = &H80000005) Then
If car > 185 Then
Select Case car
Case 186: Caractére = 36
Case 187: Caractére = 61
Case 188: Caractére = 44
Case 190: Caractére = 59
Case 191: Caractére = 58
Case 192: Caractére = 249
Case 219: Caractére = 41
Case 220: Caractére = 42
Case 223: Caractére = 33
Case 226: Caractére = 60
End Select
Else
Caractére = car
End If
Else
Select Case car
Case 178: Caractére = 178
Case 41: Caractére = 176
Case 61: Caractére = 43
Case 36: Caractére = 163
Case 42: Caractére = 181
Case 249: Caractére = 37
Case 33: Caractére = 167
Case 58: Caractére = 47
Case 59: Caractére = 46
Case 44: Caractére = 63
Case 62: Caractére = 60
Case 186: Caractére = 163
Case 187: Caractére = 43
Case 188: Caractére = 63
Case 190: Caractére = 46
Case 191: Caractére = 47
Case 192: Caractére = 37
Case 219: Caractére = 176
Case 220: Caractére = 181
Case 223: Caractére = 167
Case 226: Caractére = 62
End Select
End If
End Select
End If
'Clavier_virtuel_car(Index). = True
If Caractére <> "" Then Type_clavier_virtuel.Text = Type_clavier_virtuel.Text + Chr(Caractére)
'Frm_Clavier_Virtuel.Attente_frappe.tab = True
End Sub
Private Sub Clavier_virtuel_altgra_click(Index As Integer) 'DragOver(index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
Clavier_vir_altgra (Index)
Text1.SetFocus
End Sub
Private Sub Clavier_vir_altgra(car As Integer)
If Clavier_virtuel_altgra(car).BackColor = &H80000005 Then
Clavier_virtuel_altgra(0).BackColor = &HFFFF&
Clavier_virtuel_altgra(1).BackColor = &HFFFF&
Else
Clavier_virtuel_altgra(0).BackColor = &H80000005
Clavier_virtuel_altgra(1).BackColor = &H80000005
End If
End Sub
Private Sub Clavier_virtuel_Clav_Del_Click()
Type_clavier_virtuel.Text = ""
End Sub
Private Sub Clavier_virtuel_Echap_Click()
Unload Me
End Sub
Private Sub Clavier_virtuel_Maj_click(Index As Integer) 'DragOver(index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
Clavier_vir_Maj
Text1.SetFocus
End Sub
Private Sub Clavier_vir_Maj()
If Clavier_virtuel_Maj(0).BackColor = &H80000005 Then
Clavier_virtuel_Maj(0).BackColor = &HFFFF&
Else
Clavier_virtuel_Maj(0).BackColor = &H80000005
End If
End Sub
Private Sub Clavier_virtuel_shift_click(Index As Integer) 'DragOver(index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
Clavier_vir_shift
Text1.SetFocus
End Sub
Private Sub Clavier_vir_shift()
Clavier_virtuel_Maj(0).BackColor = &H80000005
End Sub
Private Sub Clavier_virtuel_Supp_click(Index As Integer) 'DragOver(index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
Clavier_vir_Supp
Text1.SetFocus
End Sub
Private Sub Clavier_vir_Supp()
If Type_clavier_virtuel.Text <> "" Then Type_clavier_virtuel.Text = Mid(Type_clavier_virtuel.Text, 1, Len(Type_clavier_virtuel.Text) - 1)
Text1.SetFocus
End Sub
Private Sub Clavier_virtuel_Tab_Click(Index As Integer)
phoenix591
Messages postés32Date d'inscriptionmercredi 5 décembre 2007StatutMembreDernière intervention18 mai 2012 12 oct. 2008 à 10:15
Salut,
J'ai essayé de faire évolué le keypreview suivant l'utilisation mais le problème est que je ne saurais pas quant l'opérateur de saisie décidera d'utiliser le clavier physique donc pas de possibilité de déclencher une action booléenne.
Ma solution de forcer le focus sur un textbox n'est certe pas élégant mais ça marche, c'est pour moi détourner la fonction mais bon, je n'ai plus de temps à passer sur ce clavier virtuel, j'en reste là la fonction est réalisée, je passe maintenant à la suite.