30 mai 2008

Comment récupérer le séparateur décimal de windows ?

La fonction WLangage "NumériqueVersChaine" peut retourner sous la forme d'une chaine une valeur réelle, tout en utilisant le séparateur décimal de Windows. Elle peut donc servir à récupérer si besoin ce séparateur :

SeparateurDecimal est un caractère
SeparateurDecimal = NumériqueVersChaîne(1.1,"3,1f")[[2]]
Info(SeparateurDecimal)

1 commentaire:

Asthroth a dit…

Pour ma part, j'utilise une API windows pour récupérer cette information :

sReturn est une chaîne
lReturn, lLocaleID sont des entiers

lLocaleID = API("kernel32","GetUserDefaultLCID","USER")

//Appel de la fonction en passant la variable locale
//Pour récupérer la taille du buffer du string dont nous avons besoin
lReturn = API("kernel32","GetLocaleInfoA",lLocaleID, iTYPE, sReturn, Taille(sReturn))

//Si c'est OK..
IF lReturn THEN
//On complète le buffer avec des espaces
sReturn = Complète(sReturn,lReturn)
//et nouvel appel en passant la mémoire tampon
lReturn = API("kernel32","GetLocaleInfoA",lLocaleID, iTYPE, sReturn, Taille(sReturn))
//Si Ok (lReturn > 0)
IF lReturn >0 THEN
//lReturn contient la taille de la chaîne de caractères comprenant la terminaison nulle
RENVOYER Gauche(sReturn, lReturn - 1)
END
END

Il suffit alors de lui passer en paramètre la constante en focntion de l'infirmation souhaite :

CONSTANTE
//Constantes paramètres régionaux:
LOCALE_SCURRENCY = 0x14 //Symbole Monétaire Régional
LOCALE_SINTLSYMBOL = 0x15 //Symbole Monétaire Internationnal
LOCALE_SENGCURRNAME = 0x1007 //Nom Anglais de la Devise
LOCALE_SNATIVECURRNAME = 0x1008 //Nom natif de la Devise
LOCALE_ILANGUAGE = 0x1 //Identifiant de la langue
LOCALE_SLANGUAGE = 0x2 //Nom complet de la langue en cours
LOCALE_SENGLANGUAGE = 0x1001 //Nom Anglais de la langue en cours
LOCALE_SABBREVLANGNAME = 0x3 //Abbréviation de la langue en cours
LOCALE_SNATIVELANGNAME = 0x4 //Nom de la Langue native
LOCALE_ICOUNTRY = 0x5 //Code du Pays
LOCALE_SCOUNTRY = 0x6 //Nom du Pays
LOCALE_SENGCOUNTRY = 0x1002 //Nom du Pays en Anglais
LOCALE_SABBREVCTRYNAME = 0x7 //Nom du Pays abbrégé
LOCALE_SNATIVECTRYNAME = 0x8 //Nom du Pays d'origine
LOCALE_IDEFAULTLANGUAGE = 0x9 //Code Langue par défaut
LOCALE_IDEFAULTCOUNTRY = 0xA //Code du Pays par défaut
LOCALE_IDEFAULTCODEPAGE = 0xB //Code Page
LOCALE_SMONDECIMALSEP = 0x16 //Séparateur décimal monétaire
LOCALE_SMONTHOUSANDSEP = 0x17 //Séparateur de millier monétaire
LOCALE_SMONGROUPING = 0x18 //Groupement monétaire
LOCALE_ICURRDIGITS = 0x19 //# local monetary digits
LOCALE_IINTLCURRDIGITS = 0x1A //# intl monetary digits
LOCALE_ICURRENCY = 0x1B //positive currency mode
LOCALE_INEGCURR = 0x1C //negative currency mode
LOCALE_SDECIMAL = 0xE //Séparateur décimal numérique
LOCALE_STHOUSAND = 0xF //Séparateur de millier numérique
LOCALE_SDATE = 0x1D //Séparateur de date
LOCALE_STIME = 0x1E //Séparateur de l'heure
LOCALE_SSHORTDATE = 0x1F //Format Date Court (ex: dd/MM/yy)
LOCALE_SLONGDATE = 0x20 //Format Date Long (ex: dd/MM/yyyy)
LOCALE_STIMEFORMAT = 0x1003 //Format de l'heure
LOCALE_IDATE = 0x21 //Affichage Date Courte => 0: M-D-Y; 1: D-M-Y; 2: Y-M-D
LOCALE_ILDATE = 0x22 //Affichage Date Longue => 0: M-D-Y; 1: D-M-Y; 2: Y-M-D
LOCALE_ITIME = 0x23 //Format de l'heure spécifique => 0: AM/PM; 1: 24H
LOCALE_ICENTURY = 0x24 //Format du siècle spécifique => 0: 2 digits; 1: 4 digits
LOCALE_ITLZERO = 0x25 //Zéro spécifique pour l'heure => 0: Non; 1: Oui
LOCALE_IDAYLZERO = 0x26 //Zéro spécifique pour le jour => 0: Non; 1: Oui
LOCALE_IMONLZERO = 0x27 //Zéro spécifique pour le mois => 0: non; 1: Oui
LOCALE_S1159 = 0x28 //Chaîne remplaçant la chaîne AM
LOCALE_S2359 = 0x29 //Chaîne remplaçant la chaîne PM
FIN

cordialement
ps:désolé pour la mise en page un peu.....