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

VB 6 et antérieur Discussion :

Code ASCII correspondant à Ctrl+V (Coller)


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier Avatar de mouloudéen
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2005
    Messages : 186
    Points : 81
    Points
    81
    Par défaut Code ASCII correspondant à Ctrl+V (Coller)
    Bonjour !

    Sur mon application VB j'ai fais des restriction sur mes champs text. Par exemple dans certains champs on ne peut entrer que les chiffres.
    Tout marche comme il le faut mais j'ai juste un petit bobo.
    En fait, l'utilisateur ne peut pas utilisé, dans ces champs, les raccourci Ctrl+C et Ctrl+V pour, respectivement, Copier et coller du text.

    Je veux modifier mon code dans l'evenement key_Press afin que l'utilisateur aura la possibilité d'utiliser ces deux raccorcis.

    Quel est le code ASCII correspondant au Ctrl+C et Ctrl+V ?


    Merci d'avance pour votre aide

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

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 182
    Points
    17 182
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If Shift = 2 And KeyCode = 86 Then
    'ctrl + v  OU CTRL + V
    Beep
    End If
    End Sub
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre régulier Avatar de mouloudéen
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2005
    Messages : 186
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par ProgElecT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If Shift = 2 And KeyCode = 86 Then
    'ctrl + v  OU CTRL + V
    Beep
    End If
    End Sub
    Merci,

    Mais Y a t-il un moyen d'utilisé Shift avec l'evenement key_Press ?
    J'ai essayé d'utiliser la fonction que j'ai créer pour restrindre la saisie avec Key_Down mais ca ne marche pas. je ne sais pas pourquoi.

  4. #4
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 182
    Points
    17 182
    Par défaut
    Dans l'evenement key_Press, pas possible
    Par contre dans les deux evenements KeyDown ou KeyUp, cela doit fonctionner.

    Pour l'exemple j'ai mis sa dans l'evenement Private Sub Form_KeyUp,
    mais pour toi il faudrait le mettre dans chaque TextBox,
    si tu veux faire doublon, car quand on selectionne le contenu d'un textebox, que l'on appuis sur Ctrl+C, le contenu est directement ecris dans le presse papier systéme, sans aucun code, quand on fait CTRL V dans un textbox, si il y a du texte dans le presse papier systéme, on le retrouve dans le textbox qui a le focus, sans aucun code

    Voici tout de même le code inutile pour les textbox, mais qui montre comment utiliser le presse papier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
    If Shift = 2 Then  'ctrl
     If KeyCode = 86 Then 'v  OU  V (pour coller)
      Text1.Text = Clipboard.GetText ' colle le contenu du presse papier systéme
      Beep
     End If
     If KeyCode = 67 Then 'c  OU  C (pour copier)
      Clipboard.Clear 'vide le presse papier systéme
      'recupere le contenu de Text1 en le placant dans le presse papier systéme
      Clipboard.SetText Text1.Text
     End If
    End If
    End Sub
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre régulier Avatar de mouloudéen
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2005
    Messages : 186
    Points : 81
    Points
    81
    Par défaut
    Voila mon code combiné à le tien

    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
     
    Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
     
     
        If Shift = 2 Then  'ctrl
            If KeyCode = 86 Then 'v  OU  V (pour coller)
              Text1.Text = Clipboard.GetText ' colle le contenu du presse papier systéme
              Beep
             End If
     
             If KeyCode = 67 Then 'c  OU  C (pour copier)
              Clipboard.Clear 'vide le presse papier systéme
              'recupere le contenu de Text1 en le placant dans le presse papier systéme
              Clipboard.SetText Text1.Text
             End If
     
         Else
     
                 If (KeyCode < vbKey0 Or KeyCode > vbKey9) And (KeyCode <> vbKeyBack) Then
                        KeyCode = 0
                     Else
                        KeyCode = KeyCode 
                 End If
        End If
     
    End Sub

    Mais malheureusement la restrinction ne marche pas, l'utilisateur peut taper n'importe quelle caractère.
    Lorsque j'ai mis mon code dans l'evenement Key_Press la restrinction marche mais je ne peux savoir l'etat de la touche de controle (Paramètre Shift)

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

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 182
    Points
    17 182
    Par défaut
    Il est encor temps de regarder ceci

    voici le code complet pour ton probléme
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Option Explicit
    'recuperé sur DVP
    'pour une meilleure gestion du séparateur décimal
    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()
    'initialise le code ascii "ParametreRegional" pour le seprateur decimal
    'definit sur l'ordinateur ou tourne ce programme
    AsciiLoCaleDecimal = Asc(ParametreRegional(LOCALE_SDECIMAL))
    End Sub
     
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If Text1.BackColor = &HC0E0FF Then Text1.BackColor = &HFFFFFF 'gestion de l'alerte
    'l'evenement KeyDown se produisant avant le KeyPress
    'surveiller le Shift et le Keycode
    If Shift = 2 Then  'ctrl
     If KeyCode = 86 Then 'v  OU  V (pour coller)
      Text1.SelText = Clipboard.GetText ' colle le contenu du presse papier systéme
     End If
     If KeyCode = 67 Then 'c  OU  C (pour copier)
      Clipboard.Clear 'vide le presse papier systéme
      'recupere le contenu de Text1 en le placant dans le presse papier systéme
      Clipboard.SetText Text1.Text
     End If
    End If
    End Sub
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    'appel de la fonction qui va renvoyer/modifier le Keyascii apres analyse
    KeyAscii = AnalyseAscii(KeyAscii)
    'l'appel pouvant être fait pour tous les TextBoxs ne devant
    'contenir que du numérique
    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
     
     
    Public Function AnalyseAscii(CodeAscii As Integer) As Integer
    AnalyseAscii = CodeAscii
    Select Case CodeAscii
     '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: AnalyseAscii = 49 ' de & en 1
     Case 233: AnalyseAscii = 50 'de é en 2
     Case 34: AnalyseAscii = 51 ' de " en 3
     Case 39: AnalyseAscii = 52 ' de ' en 4
     Case 40: AnalyseAscii = 53 ' de ( en 5
     Case 45: AnalyseAscii = 54 ' de - en 6 (ici probleme si besoin d'un nombre en négatif)
     Case 232: AnalyseAscii = 55 'de è en 7
     Case 95: AnalyseAscii = 56 ' de _ en 8
     Case 231: AnalyseAscii = 57 'de ç en 9
     Case 224: AnalyseAscii = 48 'de à en 0
     
     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
      AnalyseAscii = AsciiLoCaleDecimal
     
     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: AnalyseAscii = 0 ': Beep
    End Select
     
    End Function
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Autre solution (en utilisant aussi la procédure du paramètre régional, merci ProgElect )
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    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 Text1_KeyDown(KeyCode As Integer, Shift As Integer)
     
             If Shift = 2 And KeyCode = 86 Then  'ctrl+v  OU  ctrl+V (pour coller)
              Text1.Text = Clipboard.GetText ' colle le contenu du presse papier systéme
              Beep
             End If
     
             If Shift = 2 And KeyCode = 67 Then  'ctrl+c  OU  ctrl+C (pour copier)
              Clipboard.Clear 'vide le presse papier systéme
              'recupere le contenu de Text1 en le placant dans le presse papier systéme
              Clipboard.SetText Text1.Text
             End If
             If (KeyCode < 37 Or KeyCode > 40) And KeyCode <> 46 Then
                KeyCode = 0
             End If
    End Sub
     
    PPrivate Sub Text1_KeyPress(KeyAscii As Integer)
         If (KeyAscii < vbKey0 Or KeyAscii > vbKey9) And (KeyAscii <> vbKeyBack) _
         And KeyAscii <> Asc(ParametreRegional(LOCALE_SDECIMAL)) Then
                KeyAscii = 0
             Else
                KeyAscii = KeyAscii
         End If
    End Sub
    Explication :
    Dans le Keypress, tu limite les caractères (mais tu garde le paramètre de décimal)
    Dans le KeyDown tu utilise les combinaison Ctrl+c(ou v), et tu annule le keycode si on n'appuie pas sur les fleches ou sur Suppr
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  8. #8
    Membre régulier Avatar de mouloudéen
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2005
    Messages : 186
    Points : 81
    Points
    81
    Par défaut
    Un grand merci à ProgElecT et Avigeilpro

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Code ASCII ne correspond pas ?
    Par Jerwyn dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/01/2013, 22h31
  2. [Delphi6-code ASCII] à quel touche enfoncé correspond #2
    Par narutobaka dans le forum Langage
    Réponses: 5
    Dernier message: 17/05/2011, 16h18
  3. Réponses: 2
    Dernier message: 21/04/2009, 22h43
  4. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 01h27

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