Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MODIFICATION DU SÉPARATEUR DÉCIMAL DANS LA BASE DE REGISTRE


Information sur la source

Catégorie :Base de registre Niveau : Débutant Date de création : 21/01/2003 Date de mise à jour : 27/01/2003 09:03:03 Vu : 3 767

Note :
Aucune note

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Permet de trouver le séparateur décimal et de le changer si nécessaire.
En fin de prog, revient au séparateur initialement installé sur la machine
 

Source

  • ' A mettre dans un modul au chargement du prog
  • Public Declare Function SetLocaleInfo Lib "kernel32" _
  • Alias "SetLocaleInfoA" _
  • (ByVal Locale As Long, _
  • ByVal LCType As Long, _
  • ByVal lpLCData As String) As Long
  • Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
  • Public SDecSep As String
  • Public LCID As Long
  • Dim iNumber As Single
  • Dim X__ID As Long
  • iNumber = Val("1.1")
  • SDecSep = Mid(iNumber, 2, 1)
  • If SDecSep <> "." Then 'si vous voulez forcez le "." sinon "," si vous voulez forcez ","
  • LCID = GetSystemDefaultLCID()
  • X__ID = SetLocaleInfo(LCID, 14, ".")
  • 'et pour remettre le séparateur qu'il y avait à l'ouverure du prog
  • If SDecSep <> "." Then
  • X__ID = SetLocaleInfo(LCID, 14, SDecSep)
' A mettre dans un modul au chargement du prog
Public Declare Function SetLocaleInfo Lib "kernel32" _
                        Alias "SetLocaleInfoA" _
                        (ByVal Locale As Long, _
                        ByVal LCType As Long, _
                        ByVal lpLCData As String) As Long
Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long


Public SDecSep As String
Public LCID As Long


Dim iNumber As Single
Dim X__ID  As Long
iNumber = Val("1.1")
SDecSep = Mid(iNumber, 2, 1)
If SDecSep <> "." Then 'si vous voulez forcez le "." sinon "," si vous voulez forcez ","
LCID = GetSystemDefaultLCID()
X__ID = SetLocaleInfo(LCID, 14, ".")
 'et pour remettre le séparateur qu'il y avait à l'ouverure du prog
If SDecSep <> "." Then
X__ID = SetLocaleInfo(LCID, 14, SDecSep) 

Conclusion

Comme je l'ai tiré d'un prog plus important j'espère ne rien voir oublier
 

Commentaires et avis

signaler à un administrateur
Commentaire de BABASSE le 22/01/2003 10:17:04

T'as relus ??? Il me semble qu'il manque la déclaration de Getsystemdefault . De plus pour restaurer il faudrait extraire le séparateur avant , non ?
Ceci dis, je cherchais un moyen de connaître le séparateur par défault et cela me donne un indice pour le récupérer.


signaler à un administrateur
Commentaire de Patrice99 le 03/11/2003 09:37:30

Voici une version améliorée :

Public Function bChangerSeparateurDecimal( _
    Optional sSepDecimalImpose$ = ".", _
    Optional bRetablir As Boolean = False) As Boolean

    Dim sSepDecimal$, lCodePage_LCID&, rNumber!, lRet&
    Const lLOCALE_SDECIMAL& = 14 ' Code adresse du séparateur décimal : decimal separator
    
    ' Lire le séparateur décimal actuel
    rNumber = Val("1.1")
    sSepDecimal = Mid(rNumber, 2, 1)
    
    ' Conserver le séparateur décimal actuel
    Static sPrecedentSepDecimal$
    If sPrecedentSepDecimal = "" Then sPrecedentSepDecimal = sSepDecimal
    
    ' Forcer le séparateur décimal (par exemple ".")
    If sSepDecimal &lt;&gt; sSepDecimalImpose Then
        lCodePage_LCID = GetSystemDefaultLCID() ' Lire le code page actuel
        lRet = SetLocaleInfo(lCodePage_LCID, lLOCALE_SDECIMAL, sSepDecimalImpose)
        If lRet = False Then Exit Function
    End If
    
    ' Rétablir le précédent séparateur décimal avant l'appel à cette fonction
    If bRetablir And sSepDecimal &lt;&gt; sPrecedentSepDecimal Then
        lRet = SetLocaleInfo(lCodePage_LCID, lLOCALE_SDECIMAL, sPrecedentSepDecimal)
        If lRet = False Then Exit Function
    End If
    
    bChangerSeparateurDecimal = True

End Function

signaler à un administrateur
Commentaire de Mutos le 27/12/2005 05:38:14

Bonjour,


Encore un vieux post (2003 ^-^) sur le problème qui me préoccupe : une appli qui plante sur des constantes en dur et en "." lorsque la machine est en ",". Par hasard, quelqu'un aurait-il un tuyau pour modifier le séparateur dans l'application sans changer celui de la machine ? Ce me semblerait la meilleure solution, mais jusqu'à présent, 4 sujets et pas de réponse dans ce sens...


@+

Benoît 'Mutos' ROBIN
http://hoshikaze.net

signaler à un administrateur
Commentaire de Patrice99 le 27/12/2005 10:14:05

On ne peut pas changer le séparateur décimal pour une application seulement, on ne peut le changer que pour tout Windows.

signaler à un administrateur
Commentaire de Mutos le 27/12/2005 10:58:39

Bonjour à tous, bonjour PATRICE99,


VB.Net en tout cas, on peut lui faire ignorer les paramètres régionaux, j'ai testé avec les 3 lignes suivantes, mon application ne plante plus, preuve qu'elle interpréte bien les nombres avec ".", et mon panneau de config me sort bien le Français avec la "," :

Imports System.Globalization
Imports System.Threading
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")

A faire en début de programme (Main ou Load de la première forme). Ici on lui force la culture américaine avec le "." et tous les autres paramètres, mais on peut aussi faire plus subtil en créant une variable CultureInfo et en la modifiant à loisir !


@+

Benoît 'Mutos' ROBIN
http://spacesims.hoshikaze.net

signaler à un administrateur
Commentaire de poy20 le 03/11/2006 13:23:49

Excellent Mutos ^^, c'est la meilleure solution que j'ai pu lire jusqu'à maintenant ...

signaler à un administrateur
Commentaire de gregcitt le 15/11/2006 15:05:53

Cette source ne marche que si le nombre comporte 3 caractères, soit le séparateur en 2ème position, je me trompe?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.