Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Cambio formato de numero (https://www.cobolforo.es/showthread.php?t=34)

Josber 12 de junio de 2018 13:50

Cita:

Citación del post de jmeza (Mensaje 4308)
Josber, esto funciona ok para transforma el punto en coma en la digitación.
El problema se presenta cuando la configuración del compu en el panel de control el (.) punto esta como decimal y la comma (,) como unidad de mil, al grabar se registra como un numero entero.
Hay alguna forma de cambiar la configuración del panel de control por programa sin intervención del usuario.

Supongo que a través del registro de windows, se podrá hacer, si es así y alguno sabe la "rama" del registro, puedo poner un ejemplo de como leer/grabar el registro.

Un salu2.-

Kuk 12 de junio de 2018 14:02

Amigos, a ver si usamos la búsqueda ;) [Sintaxis] Cambiar el punto decimal por coma - COBOL Foro

Fito 13 de junio de 2018 00:07

Hola Amigos:

Asi lo hago yo al ingresar a la primera ventana.

Código COBOL:
  1. *... variables para verificar la configuración regional...
  2.  01  caracter        pic x(255).
  3.  01  buffer          pic s9(9) comp-5.
  4.  01  retcode         pic s9(9) comp-5.
  5.  01  estilo          pic s9(9) comp-5.
  6.  77  wsep-dec        pic x.
  7.  77  wsep-mil        pic x.
  8. *.........................................................
  9. *... variables para verificar el tamaño de la pantalla
  10.  01  xsysmetric      pic s9(9) comp-5.
  11.  01  xancho-pan      pic 9(9).
  12.  01  xalto-pan       pic 9(9).
  13.  
  14.  
  15.  01  control-win     pic S9(9) COMP-5.
  16.      88 cw-ok        value 0.
  17.      88 cw-cancel    value 1.

Código COBOL:
  1.      *-------------------------------------------------------------------------------------------------------------
  2.      *   Hago las llamadas a las API de Windows para controlar:
  3.      *        Tamaño de la pantalla (no debe ser inferior a 1024 x 768)
  4.      *        Configuración regional (controlo los separadores decimales y de miles)
  5.      *             en caso de no ser los correctos, pregunta si quiere cambiarlos automáticamente
  6.      *-------------------------------------------------------------------------------------------------------------
  7.        llamadas-api-windows.
  8.      *... Saco el tamaño de la Pantalla
  9.            call "GetSystemMetrics" with stdcall linkage using by value 0 returning xsysmetric.
  10.            move xsysmetric     to xancho-pan.          
  11.            call "GetSystemMetrics" with stdcall linkage using by value 1 returning xsysmetric.
  12.            cancel "GetSystemMetrics".
  13.            move xsysmetric     to xalto-pan.          
  14.            if xancho-pan < 1024 or xalto-pan < 720
  15.               invoke pow-self "displaymessage" using
  16.                     "El tamaño de la pantalla no puede ser inferior a 1024 x 768 pixeles"
  17.               move 1           to sen-salida
  18.               invoke pow-self "closeform"
  19.               go sale
  20.            end-if.      
  21.    
  22.       *... Saco de Windows el separador decimal
  23.            call "GetLocaleInfoA" with stdcall linkage
  24.                                  using by value 1024
  25.                                        by value 14
  26.                                        by reference caracter
  27.                                        by reference buffer
  28.               returning retcode.
  29.            cancel "GetLocaleInfoA".          
  30.            move caracter      to wsep-dec.
  31.    
  32.       *... Saco de Windows el separador de miles
  33.            call "GetLocaleInfoA" with stdcall linkage
  34.                                  using by value 1024
  35.                                        by value 15
  36.                                        by reference caracter
  37.                                        by reference buffer
  38.               returning retcode.
  39.            cancel "GetLocaleInfoA".          
  40.            move caracter      to wsep-mil.
  41.    
  42.       *... En el caso de que sea incorrecto pregunto si los quiere modificar
  43.            if wsep-dec not = "," or wsep-mil not = "."
  44.               compute estilo = pow-dmokcancel + pow-dmiconexclamation + pow-dmdefbutton2
  45.               invoke pow-self "displaymessage" using
  46.                  "¿Autoriza establecer COMA como separador decimal y PUNTO como separador de miles?"
  47.                  "Configuración regional incorrecta para esta aplicación"
  48.                  returning retcode
  49.               if retcode = pow-dmrcancel
  50.                  move 1           to sen-salida
  51.                  invoke pow-self "closeform"
  52.                  go sale
  53.               end-if
  54.            end-if.
  55.    
  56.       *... Seteo en Windows el separador decimal
  57.            move spaces        to caracter.
  58.            move ","           to caracter(1:1).
  59.            move X"00"         to caracter(2:1).  
  60.            call "SetLocaleInfoA" with stdcall linkage
  61.               using by value 1024
  62.                     by value 14
  63.                     by reference caracter
  64.               returning retcode.
  65.            cancel "SetLocaleInfoA".          
  66.    
  67.       *... Seteo en Windows el separador de miles
  68.            move spaces        to caracter.
  69.            move "."           to caracter(1:1).
  70.            move X"00"         to caracter(2:1).  
  71.            call "SetLocaleInfoA" with stdcall linkage
  72.               using by value 1024
  73.                     by value 15
  74.                     by reference caracter
  75.               returning retcode.
  76.            cancel "SetLocaleInfoA".          
  77.      *-------------------------------------------------------------------------------------------------------------
  78.      *   Fin de las llamadas
  79.      *-------------------------------------------------------------------------------------------------------------

Saludos.

Fito...


La franja horaria es GMT +2. Ahora son las 15:24.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.