18 de febrero de 2020

Obtener configuracion regional mediante API

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.