begin process at 2012 05 27 07:25:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > REMPLACER LE SYMBOLE DÉCIMAL

REMPLACER LE SYMBOLE DÉCIMAL


 Description

Pour tous ceux qui ont été déçu par la précédente source et qui ont des soucis avec le symbole décimal, voici une méthode que j'utilise afin de changer le symbole décimal au lancement de mon programme. Cela peut poser un problème dans la mesure où ce code change le symbole décimale des options régionales et linguistiques (pendant la durée où le programme est ouvert), donc pour ceux qui utilisent des programmes qui ont un autre symbole décimal que celui qu'on veut dans le programme, ça peut poser quelques problèmes, mais bon, souvent, cela ne pose aucun problème et arrange pas mal les choses...

Source

  • 'Dans un module il faut déclarer les API suivantes:
  • Public 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
  • Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
  • Public SepDec As String 'Stockage du symbole décimal de la machine avant le lancement du programme
  • Public SepDecM As String 'Stockage du symbole décimal monétaire de la machine avant le lancement du programme
  • 'Ecrivez les fonctions suivantes:
  • 'Renvoie le séparateur décimal du système
  • Public Function SysSepDec() As String
  • Dim Sep As String * 2
  • GetLocaleInfo 0, &HE, Sep, 2
  • SysSepDec = Left$(Sep, 1)
  • End Function
  • 'Renvoie le SEParateur DECimal Monétaire du SYStème
  • Public Function SysSepDecM() As String
  • Dim Sep As String * 2
  • GetLocaleInfo 0, &H16, Sep, 2
  • SysSepDecM = Left$(Sep, 1)
  • End Function
  • 'Change le SEParateur DECimal existant par le "Nouveau"
  • Public Sub ChangeSepDec(Nouveau As String)
  • 'séparateur décimal
  • SetLocaleInfo 0, &HE, Nouveau
  • End Sub
  • 'Change le SEParateur DECimal Monétaire par le "Nouveau"
  • Public Sub ChangeSepDecM(Nouveau As String)
  • 'séparateur décimal monétaire
  • SetLocaleInfo 0, &H16, Nouveau
  • End Sub
  • '##############
  • 'Dans le Form_load écrivez
  • 'Récupération du SepDec du système pr nombre et monétaire
  • SepDec = SysSepDec
  • SepDecM = SysSepDecM
  • If (SepDec = ",") Then ChangeSepDec "." 'On passe les "," en "."
  • If (SepDecM = ",") Then ChangeSepDecM "."
  • '##############
  • 'Dans le Form_Unload donc à la fermeture du programme on remet le séparateur comme il était à l'origine
  • ChangeSepDec SepDec 'Remet le séparateur décimal comme il était avant le lancement du programme
  • ChangeSepDecM SepDecM 'Remet le séparateur décimal monétaire
'Dans un module il faut déclarer les API suivantes:
Public 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
Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
Public SepDec As String            'Stockage du symbole décimal de la machine avant le lancement du programme
Public SepDecM As String           'Stockage du symbole décimal monétaire de la machine avant le lancement du programme
'Ecrivez les fonctions suivantes:
'Renvoie le séparateur décimal du système
Public Function SysSepDec() As String
    Dim Sep As String * 2
    GetLocaleInfo 0, &HE, Sep, 2
    SysSepDec = Left$(Sep, 1)
End Function
'Renvoie le SEParateur DECimal Monétaire du SYStème
Public Function SysSepDecM() As String
    Dim Sep As String * 2
    GetLocaleInfo 0, &H16, Sep, 2
    SysSepDecM = Left$(Sep, 1)
End Function
'Change le SEParateur DECimal existant par le "Nouveau"
Public Sub ChangeSepDec(Nouveau As String)
    'séparateur décimal
    SetLocaleInfo 0, &HE, Nouveau
End Sub
'Change le SEParateur DECimal Monétaire par le "Nouveau"
Public Sub ChangeSepDecM(Nouveau As String)
    'séparateur décimal monétaire
    SetLocaleInfo 0, &H16, Nouveau
End Sub
'##############
'Dans le Form_load écrivez
'Récupération du SepDec du système pr nombre et monétaire
SepDec = SysSepDec
SepDecM = SysSepDecM
If (SepDec = ",") Then ChangeSepDec "."   'On passe les "," en "."
If (SepDecM = ",") Then ChangeSepDecM "."
'##############
'Dans le Form_Unload donc à la fermeture du programme on remet le séparateur comme il était à l'origine
ChangeSepDec SepDec   'Remet le séparateur décimal comme il était avant le lancement du programme
ChangeSepDecM SepDecM 'Remet le séparateur décimal monétaire

 Conclusion

Il n'y a pas de Zip, mais en suivant les instructions et en recopiant le code, vous pourrez vous en sortir...
Bon courage, j'espère que cela vous aidera autant que moi :)


 Sources du même auteur

Source avec Zip Source avec une capture JEU EN GIFS ANIMÉS FIRECOIN
Source avec Zip Source avec une capture JEU DE REFLEXION ET D'ENTRAINEMENT OCULAIRE
Source avec Zip Source avec une capture JEU DE MATH - CALCUL MENTAL
Source avec Zip Source avec une capture OCX PROGRESSBAR SANS FIN PARAMÉTRABLE
Source avec Zip Source avec une capture DEMINEUR RESEAU TYPE MSN WINSOCK

 Sources de la même categorie

Source avec Zip Source avec une capture GESTION DES RACCOURCIS WINDOWS (LNK ET INTERNET) DANS TABLE... par zoubi57
Source avec Zip Source avec une capture Source .NET (Dotnet) GÉNÉRATEUR DE LANCEUR D'APPLICATION ADMINISTRATEUR par strikel
Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture OPTIONS PENDANT LE DÉBOGAGE par avictatum
Source avec Zip Source avec une capture CONVERTIR UN NOMBRE DÉCIMAL EN FRACTION par Guillaume170194
Source avec Zip Source avec une capture Source .NET (Dotnet) CONVERTISSEUR DÉCIMAL BINAIRE HEXADÉCIMAL OCTAL par raffika
UN CDBL QUI GERE LES OPTIONS REGIONAL CONCERANT LE SEPARATEU... par Nic0s
Source avec Zip Source avec une capture Source .NET (Dotnet) SÉPARATEUR DÉCIMAL DES NOMBRES. par christoni

Commentaires et avis

Commentaire de Drikce06 le 17/11/2006 12:01:22

Salut, j'ai pas testé ton code, mais tu déclare pas &HE comme constante! Bon, c'est pas un drame non plus!

Sinon autres méthodes pour appliquer cela à tout le système ou juste à une application (excel par exemple)

http://www.codyx.org/snippet_modifier-separateur-decimale-options-regionales-linguistiques_264.aspx

(pas noté)

Commentaire de tbbuim1 le 17/11/2006 13:24:18

Tu n'as pas besoin de déclarer &HE, puisque c'est un long...
En fait, tu as besoin de déclarer si tu mets
Public Const DECIMAL_MESCOUI.... = &HE
Or, je passe directement la valeur &HE, donc c moins lisible, mais c bon..!

Pour codyx, j'ai déjà vu ton poste sur l'autre source merci. J'étais au courant, mais ce que je regrette sur cet exemple de codyx, c qu'il ne parle que du symbol décimal &HE (justement) et pas du symbol décimal monétaire (&H16)...

Commentaire de Drikce06 le 17/11/2006 13:32:32

Oui effectivement, c'était juste pour montrer une façon de faire! Sinon c'est facilement adaptable au signe monétaire suffit de remplacer la constante &HE par &H16 et le tour est joué! Enfin je pense! Je vais tester.

Commentaire de Drikce06 le 17/11/2006 13:52:45

ça fonctionne :

Option Explicit

'Déclaration des fonctions API
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 SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCTYPE As Long, ByVal lpLCData As String) As Long
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long

'Déclaration de la constante séparateur décimal
Private Const LOCALE_SMONATARY = &H16

Public Property Get MonetarySeparator() As String
Dim nLength As Long
Dim nLocale As Long
    nLocale = GetUserDefaultLCID()
    nLength = GetLocaleInfo(nLocale, LOCALE_SMONATARY, vbNullString, 0) - 1
    MonetarySeparator = Space$(nLength)
    GetLocaleInfo nLocale, LOCALE_SMONATARY, MonetarySeparator, nLength
End Property

Public Property Let MonetarySeparator(ByRef Value As String)
Dim nLocale As Long
    If Value <> MonetarySeparator Then
        If Value = "." Or Value = "," Then
            nLocale = GetUserDefaultLCID()
            SetLocaleInfo nLocale, LOCALE_SMONATARY, Value
        End If
    End If
End Property

Commentaire de mortalino le 17/11/2006 19:08:12

Salut,

heu c'est une source ça ?
Ou un bout de code ! Perso, je ne l'aurai pas mis là, mais bon..
D'autant plus que notre ami Drikce et moi même avons déposé un "snippet" (et pas une source) ;)

Bref, code que l'on peut trouver ici :
http://www.codyx.org/snippet_modifier-separateur-decimale-options-regionales-linguistiques_264.aspx

Commentaire de tbbuim1 le 17/11/2006 20:03:20

C'est un bout de code utile, avec commentaire et moins complexe (à mon avis) pour les débutants que sur codyx.
Je n'ai déposé que des sources jusqu'à maintenant et je ne sais pas où on dépose les fameux "snippet" désolé.

Commentaire de mortalino le 17/11/2006 20:16:21

Ici : http://www.codyx.org
Ce sont les mêmes logs que Codes-Sources.

Tu peux aussi placer des commentaires, comme ici.
Disons qu'une source est censée être indépendante (et donc pas un bout de code)
A la limite (si t'as le temps), tu pourrais faire une petite interface, avec un bouton, une listbox pour proposer différents séparateurs afin d'accompagner ton code (et choix, soit de la modif du séparateur décimal, soit du séparateur monétaire)  ;)

Ca pourrait être sympa et les membres qui en ont le besoin auront la possibilité de tester ça, avant d'intégrer le code dans leur dev)

@++

Commentaire de tbbuim1 le 17/11/2006 20:20:04

Ok c cool

Commentaire de santiago69 le 20/12/2006 00:17:34

C'est enervant de voir que beaucoup d'entre vous essayent de changer le symbole decimal qu'a choisi l'utilisateur plutot que d'adapter leur application a ce symbole.
Il ne faut pas modifier les choix de l'utilisateur !
Pourquoi ne pas tout simplement recuperer le symbole au debut du programme et s'en servir dans les fonctions de calcul et d'affichage ?
Santiago

Commentaire de Drikce06 le 20/12/2006 08:14:20

santiago69, effectivement bonne remarque! Mais je dirais également que beaucoup d'utilisateur ne savent même pas qu'on peut changer ce paramètre!

Commentaire de santiago69 le 20/12/2006 09:37:38

C'est vrai, l'exercice est interessant a presenter, mais il ne faut pas proposer de faire setsymbol en debut d'appli puis resetsymbol a la fin.
De plus, moi qui suis pourtant souvent confronte a des probleme de compatibilite de notation numerique, je n'ai jamais compris pourquoi windows separe le separateur decimal numerique et monetaire (moi perso si j'ecrit 1 234,56 kilos, j'ecris aussi 1 234,56 $). Je rassemblerais donc la modification des symboles dans la meme fonction. Non ?
Il est par ailleurs indispensable de modifier en meme temps le parametre separateur de milliers (&HF et &H17). Generalement dans les systemes internationaux, on ecrit 1,234.56. Si on passe en separateur decimal francais (,) on a l'air con d'afficher 1,234,56.
Donc pourquoi pas ne pas proposer :

Sub SetSymbol(DecSep as String, Optional ThousandSep as String)
    SetLocaleInfo 0, &HE, DecSep
    SetLocaleInfo 0, &H16, DecSep
    SetLocaleInfo 0, &HF, ThousandSep
    SetLocaleInfo 0, &H17, ThousandSep
End Sub

Voila c'est tout.
Santiago

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Options régionales et linguistiques [ par simoneo ] Salut!J'ai besion de detecter si la langue des programmes non Unicode est différente de Français (France) qui se trouve dans l'onglet Options avancées Options régionales [ par steph88 ] Bonjour &#224; tous,J'aimerais v&#233;rifier dans les options r&#233;gionales que le s&#233;parateur de d&#233;cimal est un point et non un virgule, e Modifier le format date dans options régionales [ par Sirocooo ] Comment modifier les paramètres régionaux grace à une API ou autre.en fait je cherche à modifier par programme le format COURT de la date "jj/mm/aa" Connaître le langage choisi dans les "Options régionales et linguistiques" [ par garat ] Bonjour tout le monde, Je développe sous Excel des macros VBA.J'aimerai pouvoir afficher les textes de mes différentes fenêtres dans le même langage q Modifier temporairement les options régionales sous Excel [ par garat ] Bonjour &#224; tous,Dans ce m&#234;me forum on m'avait indiqu&#233; comment r&#233;cup&#233;rer le&nbsp;clavier de l'utilisateur dans ses options r&#2 Vb.Net : Récupération des options régionales [ par olanfr ] Bonjour à tous,J'ai une application Vb.Net qui effectue différents calcul avec des montants et affiche tout ça dans différentes zones.En fait je souha Récupération langue Catia v5 et séparateur décimal [ par haiduc ] Bonjour, J'ai besoin de récupérer la langue de l'interface (menus, messages, etc.) du logiciel Catia v5. Je n'arrive pas à la trouver... De même, j' Séparateur décimal [ par xavier77 ] Salut, Alors, voila mon petit soucis : dans une fonction, je fait des calculs avec des coef "en dure" comme par exemple 1.2 Sur mon PC, ca marche, pas Svp aider moi décimal fix [ par youil ] Je cherche comment faire pour déclarer un décimal avec un nombre fix après le point pour que quand je vais lui assigner 0.2500171520 il me garde le 0


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales