PDA

Ver la Versión Completa : [Sintaxis] Cambiar el punto decimal por coma


Joseg
13 de noviembre de 2015, 11:02
Estou com outro problema, o pessoal normalmente pede-me para alterar o "." (ponto) do teclado numerico pela "," virgula.
Sabe como se poderá fazer isso via API ou outro meio?
Eu ja tenho rotinas em PowerCobol para alterar as definições regionais automáticamente, mas esta esta troca do ponto pela virgula só no teclado numerico não estou a ver como.

Cumprimentos,
JoseManuel

Josber
13 de noviembre de 2015, 12:44
Estou com outro problema, o pessoal normalmente pede-me para alterar o "." (ponto) do teclado numerico pela "," virgula.
Sabe como se poderá fazer isso via API ou outro meio?

En el evento "Keypress" del control que quieras, pones:


EVALUATE POW-ARG-KEYASCII
WHEN 46
MOVE 44 TO POW-ARG-KEYASCII
END-EVALUATE.


y debería de funcionar.

Un saludo.-

Joseg
13 de noviembre de 2015, 16:11
En el evento "Keypress" del control que quieras, pones:


EVALUATE POW-ARG-KEYASCII
WHEN 46
MOVE 44 TO POW-ARG-KEYASCII
END-EVALUATE.


y debería de funcionar.

Un saludo.-

Gracias!

Mas ...é complicado. Tinha que alterar muito código :(
Tem que ser de outra forma. Quando entra na aplicação alterar logo para todo o programa. A Microsoft tem um utilitario para fazer isso, mas não é pratico para o cliente.
O Excel já faz a "," no lugar do "." no teclado numerico.

Kuk
13 de noviembre de 2015, 17:07
Joseg, el propio Form tiene también eventos de teclado. Al menos en la versión 9 me acuerdo que hay PreKeyDown, donde creo que se podría hacer.

Joseg
13 de noviembre de 2015, 17:28
Joseg, el propio Form tiene también eventos de teclado. Al menos en la versión 9 me acuerdo que hay PreKeyDown, donde creo que se podría hacer.

Gracias, mas também é necessario alterar a programação.
Com o utilitário "keytweak" consegui alterar. É uma altaração global e não apenas para o meu programa, que era o que pretendia, mas para já resolve.

Kuk
13 de noviembre de 2015, 18:11
Joseg, no entiendo nada... Preguntabas por cómo cambiar el punto decimal por coma. Pensábamos que te referías al teclado, en tu programa, que cuando introduzcas el punto decimal del teclado numérico te aparezca coma en vez de punto. Luego, según lo que has dicho, he entendido que tendías muchos CmEdit (por ejemplo) y que te suponía muchos cambios en el código. El Form también tiene "PreKeyPress" en el cual si pones el código de Josber te cambia el punto por la coma en todos los controles de ese Form.

Pero ahora dices que no quieres alterar tu programa. Entonces nos vamos a la configuración de Windows (en adjuntos). Pero cambiar esta configuración significa que todos los programas la comparten. Lo cual, no es aconsejable, si en tu país es la norma es la configuración americana (999,999,999.00) y no la europea (999.999.999,00).

Se puede cambiar por programa y por tiempo limitado dicha configuración de WIndows, pero tampoco es aconsejable si usas otros programas al mismo tiempo.

Yo tengo código para comprobar el punto decimal, si es punto o coma (yo lo hago en el evento "Opened":


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LOCALE-USER-DEFAULT PIC S9(9) COMP-5 VALUE h"0400".
01 LOCALE-SDECIMAL PIC S9(9) COMP-5 VALUE h"0E".
01 RET PIC S9(9) COMP-5.
01 LONG PIC S9(9) COMP-5.
01 BUFFER PIC X(256).

PROCEDURE DIVISION.

MOVE 256 TO LONG

CALL "GetLocaleInfoW" WITH STDCALL USING BY VALUE LOCALE-USER-DEFAULT
BY VALUE LOCALE-SDECIMAL
BY REFERENCE BUFFER
BY VALUE LONG
RETURNING RET.

IF BUFFER(1:1) = ","
DISPLAY "COMA : " BUFFER

ELSE
DISPLAY "PUNTO : " BUFFER
END-IF

Joseg
14 de noviembre de 2015, 17:50
Joseg, no entiendo nada... Preguntabas por cómo cambiar el punto decimal por coma. Pensábamos que te referías al teclado, en tu programa, que cuando introduzcas el punto decimal del teclado numérico te aparezca coma en vez de punto. Luego, según lo que has dicho, he entendido que tendías muchos CmEdit (por ejemplo) y que te suponía muchos cambios en el código. El Form también tiene "PreKeyPress" en el cual si pones el código de Josber te cambia el punto por la coma en todos los controles de ese Form.

Pero ahora dices que no quieres alterar tu programa. Entonces nos vamos a la configuración de Windows (en adjuntos). Pero cambiar esta configuración significa que todos los programas la comparten. Lo cual, no es aconsejable, si en tu país es la norma es la configuración americana (999,999,999.00) y no la europea (999.999.999,00).

Se puede cambiar por programa y por tiempo limitado dicha configuración de WIndows, pero tampoco es aconsejable si usas otros programas al mismo tiempo.

Yo tengo código para comprobar el punto decimal, si es punto o coma (yo lo hago en el evento "Opened":


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LOCALE-USER-DEFAULT PIC S9(9) COMP-5 VALUE h"0400".
01 LOCALE-SDECIMAL PIC S9(9) COMP-5 VALUE h"0E".
01 RET PIC S9(9) COMP-5.
01 LONG PIC S9(9) COMP-5.
01 BUFFER PIC X(256).

PROCEDURE DIVISION.

MOVE 256 TO LONG

CALL "GetLocaleInfoW" WITH STDCALL USING BY VALUE LOCALE-USER-DEFAULT
BY VALUE LOCALE-SDECIMAL
BY REFERENCE BUFFER
BY VALUE LONG
RETURNING RET.

IF BUFFER(1:1) = ","
DISPLAY "COMA : " BUFFER

ELSE
DISPLAY "PUNTO : " BUFFER
END-IF




OK, portugués / español problema entendimiento.
Quiero simplemente haciendo clic en el botón "." (botón DEL) keypad (teclado numerico), asumir "," (coma) (ver imagem em anexo).

Kuk
14 de noviembre de 2015, 19:49
Joseg, eso lo he entendido desde el primer post :D Lo que no entiendo es cómo lo quieres hacer sin modificar el programa! ;)

Josber
14 de noviembre de 2015, 22:39
Joseg, Si no quieres tocar nada de programación, lo tienes muuuuuyyyy dificil, o lo haces como te ha puesto Kuk o lo haces como te he puesto yo, el problema de hacerlo en el evento "PreKeyPress" es que lo cambia para todo, incluido cuando es un texto, pero cambiar el programa tienes que hacerlo sí o sí.

Un saludo.-

Joseg
18 de noviembre de 2015, 16:51
Joseg, Si no quieres tocar nada de programación, lo tienes muuuuuyyyy dificil, o lo haces como te ha puesto Kuk o lo haces como te he puesto yo, el problema de hacerlo en el evento "PreKeyPress" es que lo cambia para todo, incluido cuando es un texto, pero cambiar el programa tienes que hacerlo sí o sí.

Un saludo.-

Sem nenhuma programação fiz o que queria!
Teclado PT, apenas no teclado numerico (keypad) trocar o "ponto" (mesma tecla do "DEL") pela "coma".
O resto é para ficar como esta. A onde esta a "," fazer a "coma" a onde esta "." fazer o "ponto".
Na verdade ainda não entenderam o que estou a pedir. Queria ser eu a controlar esta ação sem ter que recorrer a utilitários externos.
Quero apenas alterar o layout do teclado (keypad e apenas uma tecla). :sis:

Josber
18 de noviembre de 2015, 17:44
Si entendemos, por lo menos yo, perfectamente lo que quieres hacer, pero insisto, sin tocar nada de programa, lo veo imposible.

Un saludo.-

Kuk
18 de noviembre de 2015, 18:45
Josber, a mí me parece que yo no me estoy enterando, porque la pregunta la veo clara y las respuestas también, pero insiste en lo suyo... Con lo cual, a lo mejor está diciendo otra cosa, no sé...

Joseg, no se puede sustituir el punto por la coma y viceversa de otra manera. O cambias el programa, o cambias la configuración de Windows. Porque el programa recibe las señales de las teclas por Windows, es Windows el que envía la tecla. Entonces, sea cambias en el propio Windows, sea cambias la interpretación de dicha tecla en tu programa. Es que no hay otra solución. No existe.

Dasije
18 de noviembre de 2015, 19:45
Existen pequeños programas residentes en memoria, que cambian lo que se introduzca como punto sea como coma al pulsar la tecla en el teclado numérico.

Yo recuerdo que Andrés Montes para sus aplicaciones de modo texto, no podía cambiar este parámetro y utiliza un exe que llamaba cuando arrancaba el programa y se quedaba en memoria cuando entraban los usuarios en el terminal server y después al cerrar la aplicación se quitaba de la memoria, y cumplia esta misión.

Yo en las aplicaciones en Power, lo que hago es mover lo que pulsa como punto se convierta a coma cuando en el keypress en los campos de importes/cantidades con decimales.

Josber
18 de noviembre de 2015, 20:09
Existen pequeños programas residentes en memoria, que cambian lo que se introduzca como punto sea como coma al pulsar la tecla en el teclado numérico.

Eso lo sabemos, pero el problema que tenían esos programas es que lo cambiaban para todo, fuera un texto o un número.

Un saludo.-

Rapinto
18 de noviembre de 2015, 23:14
Joseg,

Não sei se isto obriga a por este código em todas as Forms!!
Mas resolve, penso eu, o problema.
Nos eventos da Form em PreKeyDown, coloca o seguinte código:

IF POW-ARG-KEYCODE = 110
MOVE 188 TO POW-ARG-KEYCODE.

Saludo,
Rui

Joseg
24 de noviembre de 2015, 17:57
Joseg,

Não sei se isto obriga a por este código em todas as Forms!!
Mas resolve, penso eu, o problema.
Nos eventos da Form em PreKeyDown, coloca o seguinte código:

IF POW-ARG-KEYCODE = 110
MOVE 188 TO POW-ARG-KEYCODE.

Saludo,
Rui

Boa dica,

Obriga a por em cada form o código, mas já é uma boa alternativa.

Obrigado

Kuk
24 de noviembre de 2015, 18:47
Joseg, macho, te ha comentado lo mismo Josber, y lo de PreKeyDown yo y decías que no entendíamos lo que querías hacer ??? :losiento:

Rapinto
25 de noviembre de 2015, 00:34
Joseg,

Eu criei em cada "form" uma propriedade : IsNumeric

No PreKeyDown fica o código:
IF IsNumeric OF POW-SELF = POW-TRUE
IF POW-KEYCODE = 110
MOVE 188 TO POW-KEYCODE.


No GotFocus dos campos numéricos:
*
MOVE POW-TRUE TO IsNumeric OF POW-SELF.


No LostFocus de cada campo numerico:
MOVE POW-FALSE TO IsNumeric OF POW-SELF.


Com este código, consigo substituir o ponto decimal do Numeric Keypad pela virgula (comma) só nos campos numéricos. Nos campos alfa o ponto mantem-se como ponto.

Isto é outra alternativa, um pouco mais trabalhosa, mas mais perfeita.

Saludo,
Rui Pinto

Galileo
20 de diciembre de 2015, 11:50
Entiendo qué es lo que quiere hacer Joseg. No se cuales son las diferencias entre PowerCOBOL 3.0 y las versiones posteriores, pero en esta versión basta con indicar en el evento SPECIAL-NAMES de la pantalla principal el clásico DECIMAL-POINT IS COMMA.. Así, convierte la pulsación del punto decimal en coma sólo en los campos numéricos.

... basta con indicar en el evento SPECIAL-NAMES de la pantalla principal...

Perdón, quería decir del form.

Kuk
21 de diciembre de 2015, 11:21
Galileo, no se trata de campos COBOL, sino que de los controles EDIT que no tienen nada que ver. ;)

Recato53
21 de diciembre de 2015, 11:40
He resuelto el problema de la siguiente manera.
En el evento PreKeyDown del Formulario, añado el siguiente código:

* Cambia el punto decimal por coma (solo del teclado numérico)
IF POW-ARG-KEYCODE = POW-KEY-DECIMAL
MOVE 188 TO POW-ARG-KEYCODE
END-IF