IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos contributions VB6 Discussion :

[Trucs & Astuces] Forcer les touches clavier en numerique


Sujet :

Vos contributions VB6

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut [Trucs & Astuces] Forcer les touches clavier en numerique
    Sur site, avec un portable sur une caisse ou sur le coin d'une machine, ou même parterre, il n'est pas toujours évidant de jouer des doigts sur le clavier, tout en tenant le multimètre ou le tourne visse.

    Je n'ai pas trouvé dans la FAQ ou dans les contributions, la solution à ce besoin (ou je mis serai mal pris ! ).

    Comment forcer les entrées dans un TextBox (qui ne doit contenir que du numérique), pour que les touches numériques accessibles avec l’appui de Maj maintenu ou verrouillage du Maj (cas d’un PC portable qui n’a que très rarement un pavé numérique), soient assurément du numérique.

    Voilà un petit bout de code qui me rend la vie plus facile.
    Sur un Form, 1 TextBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If Text1.BackColor = &HC0E0FF Then Text1.BackColor = &HFFFFFF
    End Sub
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
     'transformation du code ascii des touches au dessus de la ligne AZERTY......
     'pour ne pas avoir à verrouiller ou maintenir l'appuis de Maj
     Case 38: KeyAscii = 49 ' de & en 1
     Case 233: KeyAscii = 50 'de é en 2
     Case 34: KeyAscii = 51 ' de " en 3
     Case 39: KeyAscii = 52 ' de ' en 4
     Case 40: KeyAscii = 53 ' de ( en 5
     Case 45: KeyAscii = 54 ' de - en 6 (ici probleme si besoin d'un nombre en négatif)
     Case 232: KeyAscii = 55 'de è en 7
     Case 95: KeyAscii = 56 ' de _ en 8
     Case 231: KeyAscii = 57 'de ç en 9
     Case 224: KeyAscii = 48 'de à en 0
     
     Case 46: KeyAscii = 44 ' de . en ,
     Case 44 'autorise la ,
     
     'ou inversement si le separateur decimal et le .
     'Case 44: KeyAscii = 46 ' de , en .
     'Case 46 'autorise le .
     
     Case 8 'autorisation de <--- suppr
     '(la touche Suppr, <- et -> n'est pas detecté comme KeyAscii)
     Case 48 To 57 'autorisation de toutes les touches numeriques (0 à 9)
     'sinon annule la derniere touche
     Case Else: KeyAscii = 0 ': Beep
    End Select
    End Sub
    Private Sub Text1_LostFocus()
    If Not IsNumeric(Text1) Then
     'cas de plus d'un separateur decimale ou ......
     Text1.BackColor = &HC0E0FF
     MsgBox "Entrée non valide", vbInformation
     Text1.SetFocus
    End If
    End Sub
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Un complément pour une meilleure gestion du séparateur décimal, ce code permettant de fonctionner pour le séparateur .(point) ou, (virgule) sans avoir à connaitre à l'avance les paramètres régionaux ou sera installé l'application.

    Le code a été recuperé sur DVP ICI
    Il suffit donc de rajouter au code du 1° post:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Option Explicit
    'recuperé sur DVP
    Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal locale As Long, _
        ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
     
    Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
     
    Private Const LOCALE_SDECIMAL = &HE        'séparateur décimal
     
    Dim AsciiLoCaleDecimal As Integer 'mémo du code Ascii du separateur
     
    Private Function ParametreRegional(parametre As Long) As String
    Dim lngResultat As Long
    Dim buffer As String
    Dim pos As Integer
    Dim locale As Long
    'récupère l'identifiant de l'information locale de type utilisateur
    locale = GetUserDefaultLCID()
    'renvoie le nombre de caractères nécessaire pour recevoir la valeur du paramètre demandé
    lngResultat = GetLocaleInfo(locale, parametre, buffer, 0)
    buffer = String(lngResultat, 0)
    GetLocaleInfo locale, parametre, buffer, lngResultat
    pos = InStr(buffer, Chr(0))
    If pos > 0 Then ParametreRegional = Left(buffer, pos - 1)
    End Function
     
    Private Sub Form_Load()
    AsciiLoCaleDecimal = Asc(ParametreRegional(LOCALE_SDECIMAL))
    End Sub
    Remplacer
    Case 46: KeyAscii = 44 ' de . en ,
    Case 44 'autorise la ,

    'ou inversement si le separateur decimal et le .
    'Case 44: KeyAscii = 46 ' de , en .
    'Case 46 'autorise le .
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Case 46, 44 'pour garantir la transformation de la , (virgule) ou du .(point)
     'en separateur decimal valide declaré dans les paramètres régionaux de l'ordinateur
      KeyAscii = AsciiLoCaleDecimal
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Comme je suis québécoise, je ne savais pas qu'il fallait verrouiller les majuscules (ou juste appuyer sur la touche MAJ) pour taper un chiffre avec un clavier AZERTY. Chez nous, on utilise le clavier QWERTY. Nous n'avons donc pas besoin de la touche MAJ pour les chiffres... C'est l'utilisation des caractères accentués qui est un cauchemard. En ce moment j'utilise un clavier Multilingue Standard (QWERTY). Je pourrais aussi le configurer en Français-Canada pour retrouver le 'feeling' de mon ancien clavier... Mais je n'aurais toujours pas besoin des Majuscules pour les chiffres...

    Tout ça pour dire que je le trouvais tordu, ton code de procédure, mais je comprends qu'en Europe... Alors qu'en Amérique...

Discussions similaires

  1. Fitrer les touches clavier
    Par foxydraner dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 26/04/2008, 22h50
  2. Intercepter les touches clavier sur la fiche
    Par Bourak dans le forum Langage
    Réponses: 3
    Dernier message: 14/01/2008, 15h33
  3. [Système] detecter les touche clavier en php
    Par youcef81 dans le forum Langage
    Réponses: 11
    Dernier message: 01/09/2006, 13h32
  4. Réponses: 3
    Dernier message: 30/06/2006, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo