Rutina para obtener la configuracion regional de Windows mediante API.
DIMENSION aDatos(1)
? GetConfiRegi( @aDatos )
DISPLAY MEMORY LIKE aDatos
*-------------------------------------------------------
* Retorna en una array pasado por referencia, algunos
* valores de la configuración regional
* PARAMETROS: aDatos
* USO: DIMENSION aDatos(1)
* GetConfiRegi( @aDatos )
* DEVUELVE: aDatos(1) = Símbolo decimal
* aDatos(2) = Símbolo separador de miles
* aDatos(3) = Número de dígitos decimales
* aDatos(4) = Símbolo de signo negativo
* aDatos(5) = Formato de números negativos
*-------------------------------------------------------
FUNCTION GetConfiRegi(aDatos)
#DEFINE LOCALE_USER_DEFAULT 0x400 && 1024
#DEFINE LOCALE_SDECIMAL 0xE
#DEFINE LOCALE_STHOUSAND 0xF
#DEFINE LOCALE_IDIGITS 0x11
#DEFINE LOCALE_SNEGATIVESIGN 0x51
#DEFINE LOCALE_INEGNUMBER 0x1010
LOCAL sRetval AS STRING, nRET AS LONG
IF PCOUNT() < 1 THEN
RETURN .F.
ENDIF
DECLARE LONG GetLocaleInfo IN WIN32API LONG LOCALE, ;
LONG LCTYPE, STRING LPLCDATA, LONG CCHDATA
DIMENSION aDatos(5)
FOR nRET = 1 TO 5
m.aDatos(nRET) = ""
NEXT
m.sRetval = REPLICATE(CHR(0),256)
* Símbolo decimal
m.nRET = GetLocaleInfo(LOCALE_USER_DEFAULT, ;
LOCALE_SDECIMAL, @sRetval, LEN(m.sRetval))
IF m.nRET > 0 THEN
m.aDatos(1) = LEFT(m.sRetval,m.nRET-1)
ENDIF
m.sRetval = REPLICATE(CHR(0),256)
* Símbolo separador de miles
m.nRET = GetLocaleInfo(LOCALE_USER_DEFAULT, ;
LOCALE_STHOUSAND, @sRetval,LEN(m.sRetval))
IF m.nRET > 0 THEN
m.aDatos(2) = LEFT(m.sRetval,m.nRET-1)
ENDIF
m.sRetval = REPLICATE(CHR(0),256)
* Número de dígitos decimales
m.nRET = GetLocaleInfo(LOCALE_USER_DEFAULT, ;
LOCALE_IDIGITS, @sRetval,LEN(m.sRetval))
IF m.nRET > 0 THEN
m.aDatos(3) = LEFT(m.sRetval,m.nRET-1)
ENDIF
m.sRetval = REPLICATE(CHR(0),256)
* Símbolo de signo negativo
m.nRET = GetLocaleInfo(LOCALE_USER_DEFAULT, ;
LOCALE_SNEGATIVESIGN, @sRetval,LEN(m.sRetval))
IF m.nRET > 0 THEN
m.aDatos(4) = LEFT(m.sRetval,m.nRET-1)
ENDIF
m.sRetval = REPLICATE(CHR(0),256)
* Formato de números negativos
m.nRET = GetLocaleInfo(LOCALE_USER_DEFAULT, ;
LOCALE_SNEGATIVESIGN, @sRetval,LEN(m.sRetval))
IF m.nRET > 0 THEN
m.aDatos(5) = LEFT(m.sRetval,m.nRET-1)
DO CASE
CASE m.aDatos(5) = "0"
m.aDatos(5) = "(1.1)"
CASE m.aDatos(5) = "1"
m.aDatos(5)= " -1.1"
CASE m.aDatos(5) = "2"
m.aDatos(5) = "- 1.1"
CASE m.aDatos(5) = "3"
m.aDatos(5) = "1.1-"
CASE m.aDatos(5) = "4"
m.aDatos(5) = "1.1 -"
ENDCASE
ENDIF
ENDFUNC
*-------------------------------------------------------
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.