Clavier tactile virtuel

Description

Un premier clavier virtuel pour application dans un environnement d'écran tactile. c'est juste un exemple, car je cherchais quelque chose de ce genre depuis pas mal de temps. Ce projet utilise 2 forms, une avec plusieurs textbox, l'autre avec un clavier. Le handle du textbox est utilisé pour remplire les bonnes cases, en utilisant la fonction sendmessage. Il est possible d'utiliser le clavier à partir de n'importe quelles forms du programme.

Source / Exemple :


Rem module
Rem public
Public hw As Long 'Handle du textbox

Rem private
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_GETTEXT = &HD
Private Const WM_SETTEXT = &HC
Public Function GetText(hWnd As Long) As String
Dim Txt As String
Txt = Space$(255) 'limite de 255 char.
SendMessage hWnd, WM_GETTEXT, 255&, ByVal Txt
GetText = Txt
End Function
Public Sub SetText(hWnd As Long, Text As String)
Dim s As Long
s = SendMessage(hWnd, WM_SETTEXT, 0&, ByVal Text)
End Sub

Rem form1
Private Sub Text1_Click()
hw = Text1.hWnd 'handle du textbox
Form2.Show vbModal 'affichage du clavier
End Sub

Private Sub Text2_Click()
hw = Text2.hWnd 'handle du textbox
Form2.Show vbModal 'affichage du clavier
End Sub

Private Sub Text3_Click()
hw = Text3.hWnd 'handle du textbox
Form2.Show vbModal 'affichage du clavier
End Sub

rem form2
Private Sub Command1_Click(Index As Integer)
Dim l As Integer, s As String, s1 As String

Select Case Index
    Case 0 To 10 '0 à 9 et "."
        s1 = GetText(hw)
        s1 = Trim$(s1)
        If Len(s1) > 253 Then Exit Sub  ' protection en cas de dépassement du nombre de char.
        If Len(s1) = 1 Then
            s1 = ""
        Else
            s1 = Left$(s1, Len(s1) - 1)
        End If
        
        If Index = 10 Then '"."
            Rem vérification si un "." est déjà là?
            If InStr(s1, ".") = 0 Then
                s = s1 + "."
            Else
                s = s1
            End If
        Else
            s = s1 + Trim$(Str$(Index))
        End If
        Call SetText(hw, s)
    
    Case Is = 11
        Rem -
        Exit Sub
    Case Is = 12
        Rem +
        Exit Sub
    Case Is = 13
        Rem C (effacement 1 char)
        s1 = GetText(hw)
        s1 = Trim$(s1)
        l = Len(s1)
        Select Case l
            Case Is = 0
                s1 = ""
            Case Is = 1
                s1 = ""
            Case Is = 2
                s1 = ""
            Case Else
                s1 = Left$(s1, Len(s1) - 2)
        End Select
        Call SetText(hw, s1)
    Case Is = 14
        Rem enter
        Form2.Hide
End Select
End Sub

Private Sub Form_Load()
Dim i As Integer
For i = 0 To 9
    Command1(i).Caption = Str$(i)
Next i
End Sub

Conclusion :


Premier code déposé, j'ai essayé de faire au plus simple, en détaillant les procédures

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.