Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como se si un campo es numerico? (https://www.clubdelphi.com/foros/showthread.php?t=30361)

MadeInBsAs 04-04-2006 20:20:28

Como se si un campo es numerico?
 
Digamos que quiero hacer un calculadora, de manera que le "doy" al usuario un componente del tipo TEdit para que ingrese un numero y luego lo imprimo
por pantalla el resultado a travez de un Label, si?
Como hago para saber o evitar que el usaurio me ingrese una letra en lugar de un numero?
Es que todo funcionaba barbaro, hasta que mi sobrina de 5 añitos metio sus deditos y me mostro algo que no habia previsto. Erroneo ingreso de datos :(

reina 04-04-2006 20:36:12

hola! a ver si te ayudo..en el evento OnKeyPress del edit pones:
Código Delphi [-]
    If not (Key IN ['0'..'9',#8]) then
             Key := #0;  // no es ninguno de esos caracteres lo borra

espero te sirva..sino tambien podrias usar una mascara.

saludos y exitoss

LA PATRIA SERA LIBRE!

seoane 04-04-2006 20:39:15

Por lo visto Reina se me adelanto, bueno entonces te dejo otra cosa que puede serte util.

Aqui tienes una forma de comprobar si el texto introducido en el edit se puede convertir en un numero, de esta forma si alguien introduce letras puedes darte cuenta y avisar del error o tomar las medidas que consideres oportunas.

Código Delphi [-]
var
  R: Real;
  E: Integer;
begin
  Val(edit1.Text, R, E);
  if E = 0 then
  begin
    // El texto se puede convertir a numero
    // y tenemos su valor almacenado en R
  end
  else
  begin
    // El texto no se puede convertir en un numero
    // avisamos del error o lo que sea.
  end;
end;

Ten en cuenta que aunque impidas que alguien introduzca letras siempre puede haber algun simpatico que te pegue un texto desde el portapapeles.

ManiacPC 02-09-2007 16:06:41

Validacion en tiempo real
 
Este codigo es de saiyine,
en la cadena CAD eliges lo que pondrás, (en el ejemplo es para un edit hexadecimal)
En tu caso sería

Código Delphi [-]
cad:='0123456789';

Me parece bastante util en tiempo real, pones el procedimiento en OnChange y evitas los pillos pegados y validaciones posteriores.


Código Delphi [-]
procedure TForm1.FiltroEdit(Sender: TObject);
var
i : integer;
aux,aux2,cad : string;
begin
        cad:='0123456789abcdefABCDEF';   // Solo se admiten estos caracteres
        aux2:='';
        with (Sender as TEdit) do
        begin
                aux:=text;
                for i:=1 to length(aux) do
                if pos(aux[i],cad)>0 then aux2:=aux2+aux[i];
                text:=aux2;
                SelStart:=length(aux2);
        end;
end;

Saludos


La franja horaria es GMT +2. Ahora son las 22:16:57.

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