Pb de gestion dans un clavier virtuel [Résolu]

Signaler
Messages postés
32
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
18 mai 2012
-
Messages postés
32
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
18 mai 2012
-
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)

Salut, Phoenix.

6 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
25
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 ?
Messages postés
32
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
18 mai 2012

Désolé, le lien ne fonctionne pas.

Phoenix
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
25
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 .
Messages postés
32
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
18 mai 2012

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
Messages postés
32
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
18 mai 2012

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

    KeyPreview = True
    Clavier_virtuel_Maj(0).BackColor = &H80000005
    Clavier_virtuel_altgra(0).BackColor = &H80000005
    Clavier_virtuel_altgra(1).BackColor = &H80000005
    'Frm_Clavier_Virtuel.Style = 0
       
End Sub

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)

    Clavier_vir_tab
    Text1.SetFocus
   
End Sub

Private Sub Clavier_vir_tab()

    Type_clavier_virtuel.Text = Type_clavier_virtuel.Text + "    "

End Sub

Private Sub Clav_virtuel_Del_click(Index As Integer) 'DragOver(index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
   
    Clav_virtuel_Del
    Text1.SetFocus

End Sub
Private Sub Clav_virtuel_Del()

    Type_clavier_virtuel.Text = ""

End Sub

Private Sub Clavier_virtuel_val_click(Index As Integer) 'DragOver(index As Integer, Source As Control, X As Single, Y As Single, State As Integer)

    Unload Me
   
End Sub

Private Sub Form_Unload(Cancel As Integer) 'exécuter à la fermeture de l'écran

    Unload Me
   
End Sub
Messages postés
32
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
18 mai 2012

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.

Merci à toi, A+, Phoenix.