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 |
Partager