Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como cambiar "." por "," !!! (https://www.clubdelphi.com/foros/showthread.php?t=79433)

negrokau 04-07-2012 17:35:00

Como cambiar "." por "," !!!
 
Hola a todos, me gustaria una pequeña ayuda, que es cuando presiono la tecla "." del teclado numerico, me aparezca en el tedit ,(coma), todo esto es a base de que quiero ingresar unos nros. con decimales, y es medio incomodo tener que presionar el boton de la coma del teclado, XQ presionando el .(punto) del teclado numerico no me reconoce como decimal.

Espero que hayan entendido mi pregunta... desde ya muchas gracias.....

Casimiro Noteví 04-07-2012 17:48:49

Cambiar coma por punto o punto por coma... una simple búsqueda en los foros te devolverá la solución, se ha tratado tantas veces :)

marcoszorrilla 04-07-2012 18:04:06

Un ejemplo:
Código Delphi [-]
  //Solo partidas de IVA

  SPDatDiario.BaseImpo :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0)    ,16),',','.',[rfReplaceAll]);
  SPDatDiario.TIva     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0)    ,05),',','.',[rfReplaceAll]);
  SPDatDiario.Trec     :=StringReplace(FillSpacesLeft(FormatFloat('0.00',0)    ,05),',','.',[rfReplaceAll]);

Un Saludo.

marcoszorrilla 04-07-2012 18:07:33

La función FillSpacesLeft, la he creado yo mismo, la añado para más claridad.

Código Delphi [-]
 Function FillSpacesLeft(cVar:String;nLen:Integer):String;
 begin
 Result:=StringOfChar(' ',nLen - Length(cVar))+cVar;
 end;
Un Saludo.

Casimiro Noteví 04-07-2012 18:28:56

Creo que negrokau se refiere a cuando se pulsa la tecla.

En el evento keypress

Código Delphi [-]
if key='.' then
 key := ',';

Chris 04-07-2012 18:49:14

Cita:

Empezado por negrokau (Mensaje 436707)
Hola a todos, me gustaria una pequeña ayuda, que es cuando presiono la tecla "." del teclado numerico, me aparezca en el tedit ,(coma), todo esto es a base de que quiero ingresar unos nros. con decimales, y es medio incomodo tener que presionar el boton de la coma del teclado, XQ presionando el .(punto) del teclado numerico no me reconoce como decimal.

Espero que hayan entendido mi pregunta... desde ya muchas gracias.....

El punto no es reemplazar el punto por la coma. El punto es un problema de preferencias regionales. En algunos países, se utiliza la coma como separador de punto decimal. En otros, se usa el punto que es el estándar internacional.

Creo que no es necesario que en cada valor cambies el punto por una coma. Talvez bastaría con cambiar la variable de configuración regional que determina el separador de punto decimal. La variable global es DecimalSeparator. Si el valor de esa variable es el punto, tu programa empezará a reconocer el punto como separador decimal.

Hacer lo que quieres hacer introduce Bugs futuros en los programas. Estos casos ya se han visto muy a menudo acá en el club. Haz una búsqueda de escenarios dónde los desarrolladores se quejan de "mi programa funciona perfecto, pero no en X computadora...". La mayoría de los casos, es por no respetar las configuraciones regionales.

La solución que te propuse anteriormente es sólo superficial. No abarca todos los escenarios. Por ejemplo, que pasaría si un usuario escribe una coma en lugar de un punto como separador decimal? La solución propuesta por mí fallaría. Es por esta razón, que todas las funcionalidades que utilicen y manipulen de una u otra forma la configuración regional, tienen que implementarse con mucho cuidado para no introducir Bugs futuros.

Saludos!

ecfisa 04-07-2012 19:02:19

Hola.

Coincido con Chris. Cuando el usuario presiona un punto espera ver un punto y no una coma, no sea cosa que llame al técnico o cambie el teclado :).

Una alternativa a cambiar el valor de DecimalSeparator es, realizar el cambio en la asignación:
Código Delphi [-]
var
  Valor: Double;
begin
  if DecimalSeparator = ',' then
    Valor:= StrToFloat(StringReplace(Edit1.Text, '.', ',',[]))
  else
    Valor:= StrToFloat(StringReplace(Edit1.Text, ',', '.',[]))
  ...

Saludos.

Casimiro Noteví 04-07-2012 19:10:56

Desde luego, aunque la pregunta de negrokau fuese hacer el cambio al presionar la tecla '.', creo que casi todos tenemos alguna función del tipo: CambiarPuntoPorComa, CambiarComaPorPunto, etc.

ecfisa 04-07-2012 19:21:06

Cita:

Empezado por Casimiro Notevi (Mensaje 436725)
Desde luego, aunque la pregunta de negrokau fuese hacer el cambio al presionar la tecla '.'

Si, totalmente de acuerdo. La respuesta concreta a la pregunta original es la del mensaje #5 sin dudas:
Cita:

me gustaria una pequeña ayuda, que es cuando presiono la tecla "." del teclado numerico, me aparezca en el tedit ,(coma),

Saludos :)

newtron 05-07-2012 09:15:06

Cita:

Empezado por Casimiro Notevi (Mensaje 436725)
Desde luego, aunque la pregunta de negrokau fuese hacer el cambio al presionar la tecla '.', creo que casi todos tenemos alguna función del tipo: CambiarPuntoPorComa, CambiarComaPorPunto, etc.

"Pos" yo no :p.

Yo lo que hago es, como apunta el amigo Chris, ajustar la configuración regional a mi gusto al abrir el programa y problema resuelto, igual no es la solución más técnica pero es simple y efectiva.

Saludos

olbeup 06-07-2012 08:57:43

Me sumo a Casimiro Notevi y aparte se comprueba si ya existe la coma, si es un edit que utilice número decimales.
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  // Comprobar si se ha pulsado un "." y cambiarlo por ","
  if (Key = #46) then
    Key := #44;

  // Ésta comprobación es para números decimales.
  // Comprobar si ya existe la "," y ponerlo en nulo.
  if (Pos(Key, Edit1.Text) > 0) then
    Key := #0;

  ...
  ...
end;

Un saludo.

newtron 06-07-2012 09:31:17

Cita:

Empezado por olbeup (Mensaje 436852)
Me sumo a Casimiro Notevi y aparte se comprueba si ya existe la coma, si es un edit que utilice número decimales.

Vale, ¿y haces eso en todos los edits numéricos?

olbeup 06-07-2012 12:45:12

Cita:

Empezado por newtron (Mensaje 436855)
Vale, ¿y haces eso en todos los edits numéricos?

Si, en cada uno de los Edit que tenga que introducir números con decimales.

Un Saludo.

newtron 06-07-2012 13:06:50

Cita:

Empezado por olbeup (Mensaje 436861)
Si, en cada uno de los Edit que tenga que introducir números con decimales.

Eso tiene mucha faena. ¿Por qué no te haces o pillas algún edit "tuneado" que te permita elegir el tipo de campo que estás introduciendo y que lo controle el componente?, eso simplifica mucho las cosas.

Saludos

Casimiro Noteví 06-07-2012 15:18:37

Cita:

Empezado por newtron (Mensaje 436855)
Vale, ¿y haces eso en todos los edits numéricos?


No, en mi caso es sólo en el keypress del formulario, si el 'sender' es un tipo de campo entonces se cambia.
Controlarlo en cada edit sería una barbaridad.

newtron 06-07-2012 17:39:38

Cita:

Empezado por Casimiro Notevi (Mensaje 436871)
No, en mi caso es sólo en el keypress del formulario, si el 'sender' es un tipo de campo entonces se cambia.
Controlarlo en cada edit sería una barbaridad.

Vale, pues te pregunto lo mismo que al amigo olbeup, ¿no es más fácil prepararse un edit "tuneado" para estas cosas?

Casimiro Noteví 06-07-2012 18:02:02

Cita:

Empezado por newtron (Mensaje 436891)
Vale, pues te pregunto lo mismo que al amigo olbeup, ¿no es más fácil prepararse un edit "tuneado" para estas cosas?

Por supuesto que sí. Lo que he explicado antes es pensando en la pregunta inicial que abrió este hilo.
Es preferible usar un componente edit que permita controlar directamente lo que se teclea.

newtron 06-07-2012 18:06:23

Cita:

Empezado por Casimiro Notevi (Mensaje 436894)
Por supuesto que sí. Lo que he explicado antes es pensando en la pregunta inicial que abrió este hilo.
Es preferible usar un componente edit que permita controlar directamente lo que se teclea.

ok ok ok ok

(iba a poner solo dos ok pero esto no me deja, no soy tan pesado :D)

Casimiro Noteví 06-07-2012 18:17:06

Cita:

Empezado por newtron (Mensaje 436896)
ok ok ok ok
(iba a poner solo dos ok pero esto no me deja, no soy tan pesado :D)

je, je, je, je... (idem de la longitud :D)

olbeup 08-07-2012 17:50:26

Cita:

Empezado por newtron (Mensaje 436862)
Eso tiene mucha faena. ¿Por qué no te haces o pillas algún edit "tuneado" que te permita elegir el tipo de campo que estás introduciendo y que lo controle el componente?, eso simplifica mucho las cosas.

Saludos

La verdad seria perfecto, pero hasta hoy, cada formulario lleva su KeyPress y según para que se utilize, (Número, Número con decimales, Letras y Número, etc..), lleva trabajo, pues un h...vo.

Ya lo estoy reduciendo bastante, pero bastante.

Antes utilizaba componentes de terceros desde la versión 3.0 y al pasar a la versión 5.0 ya no valian por incompatibilidad y te dejaban tirado, desde ese momento, aprendi a no utilizar componentes de terceros y sólo los que traia el propio delphi, me las ingeniaba para salir adelante

Soy chapada a la antigua, yo me lo guiso yo me lo como.

Un saludo.


La franja horaria es GMT +2. Ahora son las 08:26:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi