Ir al contenido


Foto

Como hacer para que un edit solo acepte numeros de tipo Float


  • Por favor identifícate para responder
17 respuestas en este tema

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 29 mayo 2009 - 07:32

Hola a todos
Necesito que un control TEdit solo me acepte numeros tipo float, es decir con decimales

Con


delphi
  1. if not( key in ['0'..'9',#8]) then
  2.   key := #0;


no me sirve, pues no me deja poner el punto decimal

tambien probe con:



delphi
  1.   if Not ((StrScan('0123456789,.-',Key) <> nil) or (Key = Char(VK_BACK))) then
  2.     Key:=#0;



En este caso me deja poner el punto decimal, pero tambien deja poner mas de uno y cuando se hace la conversion da error

Alguien tiene alguna idea mejor?

  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 29 mayo 2009 - 07:41

Puedes usar las RX library. Tienen un componente llamado CurrencyEdit y es perfecto para lo que requieres.

Saludos
  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 29 mayo 2009 - 08:38

Hola
Este componente es el que uso.
Contiene dos edit, uno es para float.
Se instala como cualquier otro componente.
Es muy sencillo y practico.
Saludos
  • 0

#4 defcon1_es

defcon1_es

    Member

  • Miembros
  • PipPip
  • 19 mensajes
  • LocationEspaña

Escrito 29 mayo 2009 - 08:51

Hola a todos
Necesito que un control TEdit solo me acepte numeros tipo float, es decir con decimales

Con


delphi
  1. if not( key in ['0'..'9',#8]) then
  2.   key := #0;


no me sirve, pues no me deja poner el punto decimal


prueba asi:


delphi
  1. if not( key in ['0'..'9',#8,SysUtils.DecimalSeparator]) then
  2.   key := #0;



Si además permites números negativos, debes incluir en el conjunto el caracter '-'
  • 0

#5 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 29 mayo 2009 - 10:12

Muchas gracias a todos por sus respuestas  :)

Ya probe el CurrencyEdit que me dijo Poliburro y Ok,

Tambien acabo de descargar el componente de Caral para probarlo, me gusta probar todas las opciones que me dan

defcon1_es
Los negativos no me interesan, pues siempre seran valores positivos, es cierto que con esa opcion solo admite Float, pero tambien permite mas de un separador decimal

  • 0

#6 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 29 mayo 2009 - 10:17

Con esta funcion  y el evento onkeyPress  Funciona correctamente


delphi
  1. function HaySeparador(const S:string):Boolean;
  2. var
  3. i,n :integer;
  4. Separador : Char;
  5. begin
  6. n:= 0;
  7. Result := False;
  8. Separador := SysUtils.DecimalSeparator;
  9. for I := 1 to Length(S) do
  10.   if S[i] = Separador then
  11.   n:= n+1;
  12.   Result := n >0; 
  13. end;
  14.  
  15. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  16. var
  17. Separador : Char;
  18. begin
  19. Separador := SysUtils.DecimalSeparator;
  20. if (Key = Separador) and (Length(Edit1.Text) = 0) then
  21. begin
  22. key := char(0);
  23. showmessage('Caracter incorrecto');
  24. Exit;
  25. end;
  26.  
  27. if (Key = Separador) and HaySeparador(Edit1.Text) then
  28. begin
  29. key := char(0);
  30. showmessage('Ya hay separador');
  31. Exit;
  32. end;
  33.  
  34. if  not (key in['0'..'9',Separador,#8]) then
  35. begin
  36. key := char(0);
  37. showmessage('Caracter invalido');
  38. end;
  39. end;


  • 0

#7 defcon1_es

defcon1_es

    Member

  • Miembros
  • PipPip
  • 19 mensajes
  • LocationEspaña

Escrito 29 mayo 2009 - 10:20

es cierto que con esa opcion solo admite Float, pero tambien permite mas de un separador decimal

Cierto, no caí­ en ello porque me fijé en un código fuente antiguo... :s

En el nuevo cambiamos los DBEdit por CurrencyEdit y actualizamos la info pasando los valores de los CurrencyEdit como parámetros de un IBStoredProc ;)


  • 0

#8 Faust

Faust

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 213 mensajes
  • LocationDistrito Federal

Escrito 29 mayo 2009 - 11:02

ja ja ja...

Acabo de leer este mismo hilo en Club Delphi...

No crean que me molesto, pero hay que agotar los recursos...

saludos.  :D
  • 0

#9 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 29 mayo 2009 - 12:02

Aquí­ otra alternativa usando expresiones regulares en el evento keypress



delphi
  1.   if (not (Key in [Chr(VK_BACK)])) and (not ExecRegExpr('^\d*(\'+DecimalSeparator+'\d*)?$', (Sender as TEdit).Text + Key)) then
  2.       Key:= #0




Saludos
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 29 mayo 2009 - 01:50

Otra opción, como alternativa, es dejar que en Edit se escriba y hacer la comprobación después ;). En este punto puede ser útil valerse de la función TryStrToFloat, y/o porqué no... de Val(). Empleando Val() podemos evaluar en el parámetro Code cual es el caracter inválido.

Saludos,


  • 0

#11 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 30 mayo 2009 - 09:41

ja ja ja...

Acabo de leer este mismo hilo en Club Delphi...

No crean que me molesto, pero hay que agotar los recursos...

saludos.  :D


Pues si Faust, tambien lo publique en Club Delphi, asi las posibilidades de respuestas son mayores  :) :D 
Me gusta participar en los dos foros, como muchos aqui  :D :D  ;) ;)
  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 10 septiembre 2010 - 09:36


ja ja ja...

Acabo de leer este mismo hilo en Club Delphi...

No crean que me molesto, pero hay que agotar los recursos...

saludos.  :D


Pues si Faust, tambien lo publique en Club Delphi, asi las posibilidades de respuestas son mayores  :) :D 
Me gusta participar en los dos foros, como muchos aqui  :D :D  ;) ;)


Hola JuAnCA, en DelphiAccess no tenemos ningún problema de que se participe en ambos foros, varios lo hacemos, sin embargo, lo único que se puede pedir (si se puede decir así) es que respetes tanto las respuestas de Club Delphi como las de DelphiAccess, por supuesto esto no tiene nada que ver con pedir permiso ni nada por el estilo, tiene que ver con un respeto no escrito que nos debemos tener entre foros en relación a las respuestas que se te den, por lo demás por supuesto que estas en tu derecho de participar donde gustes, nada malo hay en eso y nadie te lo va a reclamar.

Salud OS
  • 0

#13 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 10 septiembre 2010 - 10:02

Hola JuAnCA, en DelphiAccess no tenemos ningún problema de que se participe en ambos foros, varios lo hacemos, sin embargo, lo único que se puede pedir (si se puede decir así) es que respetes tanto las respuestas de Club Delphi como las de DelphiAccess, por supuesto esto no tiene nada que ver con pedir permiso ni nada por el estilo, tiene que ver con un respeto no escrito que nos debemos tener entre foros en relación a las respuestas que se te den, por lo demás por supuesto que estas en tu derecho de participar donde gustes, nada malo hay en eso y nadie te lo va a reclamar.

Salud OS


Que hice mal?  :embarrassed:

Que no respeté?  :|
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 10 septiembre 2010 - 10:05


Hola JuAnCA, en DelphiAccess no tenemos ningún problema de que se participe en ambos foros, varios lo hacemos, sin embargo, lo único que se puede pedir (si se puede decir así) es que respetes tanto las respuestas de Club Delphi como las de DelphiAccess, por supuesto esto no tiene nada que ver con pedir permiso ni nada por el estilo, tiene que ver con un respeto no escrito que nos debemos tener entre foros en relación a las respuestas que se te den, por lo demás por supuesto que estas en tu derecho de participar donde gustes, nada malo hay en eso y nadie te lo va a reclamar.

Salud OS


Que hice mal?  :embarrassed:

Que no respeté?  :|


No hiciste nada mal, simplemente estoy comentandolo por lo que paso en el hilo de las bocinas y que al estar en ambos foros puede suceder. ;)

Salud OS
  • 0

#15 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 10 septiembre 2010 - 10:12

Uhff menos mal, me habia asustado  :s
  • 0

#16 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 10 septiembre 2010 - 10:18

Uhff menos mal, me habia asustado  :s


Nada amigo, todo bien.

Salud OS

[off-topic]Por cierto, ¿acabas de colocar la bandera de Cuba en tu avatar?, no la había visto, es muy bonita[/off-topic]
  • 0

#17 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 10 septiembre 2010 - 10:20

[off-topic]Por cierto, ¿acabas de colocar la bandera de Cuba en tu avatar?, no la había visto, es muy bonita[/off-topic]


Pues si, la acabo de poner,
si, es muy bonita
  • 0

#18 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 10 septiembre 2010 - 11:33

Buenas,

Personalmente recomiendo el uso de las JVCL antes de las RxLib dado que las RxLib ya no se mantienen y las JVCL incorporaron esos componentes, corrigieron bugs y siguen activas :)

Nos leemos

  • 0




IP.Board spam blocked by CleanTalk.