PDA

Ver la Versión Completa : [Duda] Cambio formato de numero


Roger
13 de febrero de 2015, 22:25
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
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
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:


EVALUATE POW-ARG-KEYASCII
WHEN 46 *> Cambiamos el punto por una coma
MOVE 44 TO POW-ARG-KEYASCII
END-EVALUATE.

Un saludo.-

jmeza
8 de junio de 2018, 21:36
Cambié el IF por un EVALUATE, pero funciona exactamente igual.

En el Evento KeyPress del campo, pones:


EVALUATE POW-ARG-KEYASCII
WHEN 46 *> Cambiamos el punto por una coma
MOVE 44 TO POW-ARG-KEYASCII
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
Juan, fijate si en tu form estas usando en SPECIAL-NAMES DECIMAL-POINT IS COMMA.



468

jmeza
9 de junio de 2018, 02:29
Juan, fijate si en tu form estas usando en SPECIAL-NAMES DECIMAL-POINT IS COMMA.



468

Roger, efectivamente en el form esta configurado como me indicas

Josber
12 de junio de 2018, 13:50
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 (https://www.cobolforo.es/showthread.php?t=264&p=1236)

Fito
13 de junio de 2018, 00:07
Hola Amigos:

Asi lo hago yo al ingresar a la primera ventana.


*... variables para verificar la configuración regional...
01 caracter pic x(255).
01 buffer pic s9(9) comp-5.
01 retcode pic s9(9) comp-5.
01 estilo pic s9(9) comp-5.
77 wsep-dec pic x.
77 wsep-mil pic x.
*................................................. ........
*... variables para verificar el tamaño de la pantalla
01 xsysmetric pic s9(9) comp-5.
01 xancho-pan pic 9(9).
01 xalto-pan pic 9(9).


01 control-win pic S9(9) COMP-5.
88 cw-ok value 0.
88 cw-cancel value 1.



*-------------------------------------------------------------------------------------------------------------
* Hago las llamadas a las API de Windows para controlar:
* Tamaño de la pantalla (no debe ser inferior a 1024 x 768)
* Configuración regional (controlo los separadores decimales y de miles)
* en caso de no ser los correctos, pregunta si quiere cambiarlos automáticamente
*-------------------------------------------------------------------------------------------------------------
llamadas-api-windows.
*... Saco el tamaño de la Pantalla
call "GetSystemMetrics" with stdcall linkage using by value 0 returning xsysmetric.
move xsysmetric to xancho-pan.
call "GetSystemMetrics" with stdcall linkage using by value 1 returning xsysmetric.
cancel "GetSystemMetrics".
move xsysmetric to xalto-pan.
if xancho-pan < 1024 or xalto-pan < 720
invoke pow-self "displaymessage" using
"El tamaño de la pantalla no puede ser inferior a 1024 x 768 pixeles"
move 1 to sen-salida
invoke pow-self "closeform"
go sale
end-if.

*... Saco de Windows el separador decimal
call "GetLocaleInfoA" with stdcall linkage
using by value 1024
by value 14
by reference caracter
by reference buffer
returning retcode.
cancel "GetLocaleInfoA".
move caracter to wsep-dec.

*... Saco de Windows el separador de miles
call "GetLocaleInfoA" with stdcall linkage
using by value 1024
by value 15
by reference caracter
by reference buffer
returning retcode.
cancel "GetLocaleInfoA".
move caracter to wsep-mil.

*... En el caso de que sea incorrecto pregunto si los quiere modificar
if wsep-dec not = "," or wsep-mil not = "."
compute estilo = pow-dmokcancel + pow-dmiconexclamation + pow-dmdefbutton2
invoke pow-self "displaymessage" using
"¿Autoriza establecer COMA como separador decimal y PUNTO como separador de miles?"
"Configuración regional incorrecta para esta aplicación"
returning retcode
if retcode = pow-dmrcancel
move 1 to sen-salida
invoke pow-self "closeform"
go sale
end-if
end-if.

*... Seteo en Windows el separador decimal
move spaces to caracter.
move "," to caracter(1:1).
move X"00" to caracter(2:1).
call "SetLocaleInfoA" with stdcall linkage
using by value 1024
by value 14
by reference caracter
returning retcode.
cancel "SetLocaleInfoA".

*... Seteo en Windows el separador de miles
move spaces to caracter.
move "." to caracter(1:1).
move X"00" to caracter(2:1).
call "SetLocaleInfoA" with stdcall linkage
using by value 1024
by value 15
by reference caracter
returning retcode.
cancel "SetLocaleInfoA".
*-------------------------------------------------------------------------------------------------------------
* Fin de las llamadas
*-------------------------------------------------------------------------------------------------------------


Saludos.

Fito...