| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
gulfar Cdt

Registrado: 01 Feb 2003Mensajes: 7
|
Publicado: Sab 01 Feb, 2003 7:59 pm Asunto: Rutina filtro de caracteres para decimales en un TEdit |
|
|
| 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 |
|
 |
Droman Ens


Registrado: 04 May 2003Mensajes: 34Ubicación: Madrid - SPAIN -
|
Publicado: Lun 01 Sep, 2003 4:19 pm Asunto: Ampliación sobre control de decimales |
|
|
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 |
|
 |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Jue 09 Oct, 2003 4:37 pm Asunto: |
|
|
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 |
|
 |
novato Cdt

Registrado: 12 Sep 2003Mensajes: 20Ubicación: madrid
|
Publicado: Lun 27 Oct, 2003 12:47 pm Asunto: |
|
|
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 |
|
 |
|