http://www.ajpdsoft.com/modules.php?name=Foros&file=viewtopic&t=937
Aquí tienes una función, por supuesto no es la mejor, pero es una forma rápida de resolver el problema:
Para el caso de un entero (integer):
Código: |
//Comprueba si un valor es numérico function esNumero (valor : string) : boolean; var numero : integer; begin try numero := strtoint(valor); result := true; except result := false; end; end; |
Para el caso de un double:
Código: |
//Comprueba si un valor es numérico function esNumero (valor : string) : boolean; var numero : double; begin try numero := StrToFloat(valor); result := true; except result := false; end; end; |
En ambas funciones utilizamos las funciones de Delphi "StrToFloat" y "StrToInt" para convertir una cadena de texto a double y a integer respectivamente. Si la función no puede convertir el valor de cadena devolverá un error, lo capturaremos y devolveremos true o false según se haya podido convertir o no.
Existen más posibilidades, por supuesto, otra es comprobar con el evento "OnKeyPress" del los cuadros de edición (TEdit) si lo que se introduce es un número o un texto para no dejar introducir letras en el cuadro. Aunque este caso puede ser más complicado, pues habría que realizar bastantes comprobaciones: el usuario debe poder introducir "-" (para números negativos), también "," como separador de decimales. Y se debe comprobar que el usuario no introduzca dos comas, ni dos guiones. Para este caso sería algo así (sin comprobar que se introduzcan dos guiones o dos o más comas):
Código: |
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9']) and (Key <> ',') and (Key <> '-') then Key := #0; end; |
En este caso el código anterior lo ponemos en el evento OnKeyPress, si el usuario no introduce un número, una coma o el signo menos, la pulsación quedará anulada con key := #0, por lo que el usuario sólo podrá introducir número en el TEdit.
----------
Yo en mi programa para ahorrar código he utilizado estas funciones que vienen a continuación:
Código: |
function esNumero (key : char) : boolean; begin //Si no es un número o el caracter borrado izquierda entrega false //y no muestra el texto. if not ((key in ['0'..'9']) or (Key = #8)) then begin result := false; end else begin result := true; end; end; procedure TForm1.edt_cantidadKeyPress(Sender: TObject; var Key: char); begin if not (esNumero (Key) = true) then key := #0; end; end. |
No hay comentarios:
Publicar un comentario