PDA

Ver la Versión Completa : Ayuda Por Favor! Condición If


javave
18-08-2010, 18:31:03
Hola amigos qué tal?

Epa soy novato en Delphi, apenas empecé a usarlo ayer.

Estoy creando un programita para familiarizarme con Delphi. Sin embargo, tengo una duda que me está matando:mad::confused::

Estoy creando una condición y necesito saber cómo hago para extraer los datos de un EDIT para poder aplicar la condición.

Hasta ahora tengo este código:

var
prueba: Double;

begin
prueba := StrToFloat(Valor.Text);
prueba := Format([prueba]);
if isNAN(prueba) then
ShowMessage ('Lo que introdujo no es un número')
end.

Donde <<Valor>> es es nombre del EDIT donde el usuario introduce los números.

El objetivo es que el programa avise cuando el usuario introduce letras en ese EDIT. El programita que estoy desarrollando es un conversor.:D

Gracias espero su respuesta.

ecfisa
18-08-2010, 18:46:38
Hola javave.

Podés asignar esto al evento OnExit del TEdit:

procedure TForm1.ValorExit(Sender: TObject);
var
Value: Integer;
begin
if not TryStrToInt(Valor.Text, Value) then
begin
ShowMessage('No ingresó un número');
Valor.SetFocus;
end;
end;


O directamente evitar que lo ingrese, asignando esto al evento OnKeyPress del TEdit:

procedure TForm1.ValorKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#8,#13,'0'..'9']) then // teclas permitidas BacSpace,Intro,'0'..'9'
begin
Beep;
Key:= #0;
end;
end;


Hay otras opciones, pero creo que estas son simples y te funcionaran bién.

Saludos.

Chris
18-08-2010, 19:58:55
Normalmente siempre es más oportuno utilizar la función TryStrToFloat en lugar de StrToFloat. TryStrToFloat devuelve TRUE si la cadena dada en el primer parámetro solo tenía números, de lo contrario, devolverá FALSE.

var
prueba: Double;
begin
if not TryStrToFloat(Valor.Text, Prueba) then
begin
ShowMessage ('Lo que introdujo no es un número');
Exit;
end;
end;

ecfisa
18-08-2010, 20:06:34
Normalmente siempre es más oportuno utilizar la función TryStrToFloat en lugar de StrToFloat. TryStrToFloat devuelve TRUE si la cadena dada en el primer parámetro solo tenía números, de lo contrario, devolverá FALSE.


Correcto, con TryStrToFloat ampliamos la opción a números reales.
Te comento javave que TryStrToInt funciona del mismo modo pero con enteros.

En ese caso la verificación OnKeyPress queda:

procedure TForm1.ValorKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#8, #13, ',' , '0'..'9']) then // teclas permitidas BacSpace,Intro,'0'..'9', ',' o '.'
begin
Beep;
Key:= #0;
end;
end;


De acuerdo al delimitador especificado poné '.' o ','

Para especificarlo podés usar la variable DecimalSeparator.
Para el código de arriba:

DecimalSeparator := ',';



Saludos.

javave
18-08-2010, 21:00:27
Gracias a todos por su apoyo!

Ya pude resolver el problema! :D