Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Rutina filtro de caracteres para decimales en un TEdit

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Rutina filtro de caracteres para decimales en un TEdit Responder citando

Código:
void __fastcall TForm1::EdicionKeyPress(TObject *Sender, char &Key)
{
int long;
char *Cuenta;//variable auxiliar q nos va ayudar a realizar los calculos
AnsiString texto;
texto=Edicion->Text;//leemos el texto insertado desde el programa
Cuenta=texto.c_str();
long=Edicion->Text.Length();

if (long==0)//impide que el primer caracter sea distinto de número
   if((Key<'0'||Key>'9') && Key !=8)
      Key=0;

if(long==1)//el segundo caracter solo puede ser o un número o el simbolo de decimal
  if((Key<'0'||Key>'9') && Key !=8 && Key!=',')
      Key=0;

if(long>=2)
for (int w=0; w<=long;w++){
  if((Key<'0'||Key>'9') && Key !=8  && Key!=',')//si es cualquier caracter distinto a un numérico o a ',' no lo representa
      Key=0;
   if(Cuenta[w]==',')
      if(Key==',')//si ya había un simbolo decimal y se introduce otro lo ignora
       Key=0;
      else
      if((Key<'0'||Key>'9') && Key !=8)// sino comprueba q no sea distinto de numerico
        Key=0;
   }//for
 }//funcion
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Ampliación sobre control de decimales Responder citando

Estupenda función a la que debo ampliar en un detalle:

Si añadimos la condición

Código:

     
      if (Key=='.') Key=',';



Podremos utilizar el punto del teclado numerico que es mucho más comodo que la coma habitual.

Por cierto, una corrección... utilizas la palabra reservada long para referirte a la variable que contiene el numero de caracteres del campo Edit, habría que substituirla por, por ejemplo, Long para evitar errores de compilación.

Saludos.
_________________
Entonces el bibliotecario miró a los libros enfurecido y les gritó ¡¡ OOOK !!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Mejor seria usar DecimalSeparator en vez de "." o ",". De esta manera tomara el caracter utilizado por el sistema.
entonces:
Código:

if( (bla bla) & Key!=DecimalSeparator)
{
(...)
}


bye
diego
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

no se creo que se puede optimizar la funcion cuando long >=2

creo que si
if((Key<'0'||Key>'9') && Key !=8 && Key!=',')//si es cualquier caracter distinto a un numérico o a ',' no lo representa
Key=0;
no deberia entrar en el for

y ya no deberia comprobarlo mas en el for

if(long>=2)
{
if((Key<'0'||Key>'9') && Key !=8 && Key!=',')
Key=0;
else
{
for (int w=0; w<=long;w++)
{
if(Cuenta[w]==',')
{
if(Key==',')
Key=0;
}
}//for
}//if

no es que yo sepa mucho es que creo que sino repetimos mucho
gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.