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)

Roger 13 de febrero de 2015 22:25

Cambio formato de numero
 
Amigos del foro
Tengo un instalador de mi sistema pero tengo un problema cuando se instala en una maquina y el formato de numero esta estableciod como "," y no el simbolo decimal "." no funciona la cargada de datos en los ctlist
se puede por programa cambiar? si tener que el usuario este entrando a panel de control ,cambio de formato numero.....

he visto que otros software al momento de instalar cambia este formato como lo hacen???

:rey:

Josber 14 de febrero de 2015 10:09

No estoy seguro, pero si abres el editor del registro y vas a la clave

HKEY_USERS\.DEFAULT\Control Panel\International

Tienes todos los valores que se cambian desde el panel de control, es cuestión de probar a cambiar 2 valores que se llaman sDecimal y sMonDecimalSep.

Ten en cuenta que ésto lo hace para todo los programas de manera permanente, ¿ no te sería más facil incluir en el evento Keypress de tus programas el cambio de punto decimal por comma ?, es un simple IF y un MOVE.

Un saludo y suerte.-

Hrmcobol 14 de febrero de 2015 12:46

Hola Amigo, te envie un correo al hotmail.
Saludos

Roger 14 de febrero de 2015 15:21

Gracias por la respuesta Josber y Hrmcobol
Recibi el correo con el programa , se pone al comienzo de cada programa o al inicio del
sistema?
Si tengo ya establecido "." y "," lo invierte? porque a las maquinas que se instala no se
como lo tienen su sistema numerico este paquete lo vendo por internet.
En todo caso habria una forma de trastear si esta con el formato numerico requerido
caso contrario activo este programa.
Probare en todos los casos haber como funciona.

Hrmcobol 14 de febrero de 2015 19:44

Reger, yo tengo un EXE que hace de menu y ejecuta las dlls, por lo tanto cuando arranca(opened) cambio la configuracion y cuansa salgo(closed) la vuelvo a dar vuelta.

Saludos

jmeza 6 de junio de 2018 01:26

Josber
 
Cita:

Citación del post de Josber (Mensaje 85)
No estoy seguro, pero si abres el editor del registro y vas a la clave

HKEY_USERS\.DEFAULT\Control Panel\International

Tienes todos los valores que se cambian desde el panel de control, es cuestión de probar a cambiar 2 valores que se llaman sDecimal y sMonDecimalSep.

Ten en cuenta que ésto lo hace para todo los programas de manera permanente, ¿ no te sería más facil incluir en el evento Keypress de tus programas el cambio de punto decimal por comma ?, es un simple IF y un MOVE.

Un saludo y suerte.-

Josber
Si no es mucho, me podrías dar un ejemplo de esta instrucción (?, es un simple IF y un MOVE)
para implementarlo en mi programs,

Saludos

Josber 6 de junio de 2018 13:20

Cita:

Citación del post de jmeza (Mensaje 4295)
Josber
Si no es mucho, me podrías dar un ejemplo de esta instrucción (?, es un simple IF y un MOVE)
para implementarlo en mi programs,

Cambié el IF por un EVALUATE, pero funciona exactamente igual.

En el Evento KeyPress del campo, pones:

Código COBOL:
  1.      EVALUATE POW-ARG-KEYASCII
  2.               WHEN 46           *> Cambiamos el punto por una coma
  3.                    MOVE 44 TO POW-ARG-KEYASCII
  4.      END-EVALUATE.
Un saludo.-

jmeza 8 de junio de 2018 21:36

Josber
 
Cita:

Citación del post de Josber (Mensaje 4299)
Cambié el IF por un EVALUATE, pero funciona exactamente igual.

En el Evento KeyPress del campo, pones:

Código COBOL:
  1.      EVALUATE POW-ARG-KEYASCII
  2.               WHEN 46           *> Cambiamos el punto por una coma
  3.                    MOVE 44 TO POW-ARG-KEYASCII
  4.      END-EVALUATE.
Un saludo.-

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.

Agradecido por tu ayuda

Saludos

Roger 9 de junio de 2018 02:10

1 Archivos Adjunto(s)
Juan, fijate si en tu form estas usando en SPECIAL-NAMES DECIMAL-POINT IS COMMA.



Archivo Adjunto 468

jmeza 9 de junio de 2018 02:29

1 Archivos Adjunto(s)
Cita:

Citación del post de Roger (Mensaje 4312)
Juan, fijate si en tu form estas usando en SPECIAL-NAMES DECIMAL-POINT IS COMMA.



Archivo Adjunto 468

Roger, efectivamente en el form esta configurado como me indicas

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:21.

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