Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error: Is not a valid integer value (https://www.clubdelphi.com/foros/showthread.php?t=83135)

darkmaster360 15-05-2013 20:13:18

Error: Is not a valid integer value
 
Saludos.

Tengo un SpinEdit y al borrar el texto me salta el error: Is not a valid integer value.

Estuve mirando en google, en algunos temas de este foro pero nada, y de otras páginas en inglés y probando los códigos que mencionaban pero no me sirvió ninguno. Le puse este:
Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
    Timer1.Interval := SpinEdit1.Value;
     try
    A := StrToIntDef(SpinEdit1.Text, 0)
  except
    on Exception : EConvertError do
      ShowMessage(Exception.Message);
  end;
  end;

Pero nada me sigue apareciendo. ¿Alguna solución?

oscarac 15-05-2013 20:28:42

he probado el ejemplo que pones y si me funciona bien
lo que no colocas es que tipo de Variable es "A"
quiza ahi este el problema

darkmaster360 15-05-2013 20:34:43

Hola oscarac

El tipo de variable lo puse al principio:
Código Delphi [-]
implementation

var
A: integer;

Pero se me olvido añadirlo :o
El código no me funciona, al borrar el texto del spinedit me salta el error, o al cambiar el número escribiendo otro.

Saludos.

oscarac 15-05-2013 21:24:07

mmm dejame revisar

ecfisa 15-05-2013 21:31:16

Hola Darkmaster360.

Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
    Timer1.Interval := SpinEdit1.Value;
end;
Siendo la propiedad Value de tipo Integer, no hay manera de que la porción de código anterior te dé el error "Is not a valid integer value".

¿ No te sirve hacer ?
Código Delphi [-]
   A := SpinEdit1.Value;
Por que supongo que el error se dispara cuando ingresas un número decimal...

Saludos. :)

oscarac 15-05-2013 21:33:20

prueba haciendo esto

Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
var i,c:integer;
var s:string;
begin
 begin
   s:=Tspinedit(sender).text;
   val(s,i,c);
   if c <> 0 then
   begin
     Tspinedit(sender).value:=Tspinedit(sender).tag;
     beep;
   end
   else
     Tspinedit(sender).tag:=i;
 end;
end;

ecfisa 15-05-2013 21:44:33

Hola de nuevo.

Me quedé con la duda (por que coincido con oscarac que el código no tendría que dar error) y la única forma que pude reproducir la excepción con cadena vacía fue así:
Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
  A: Integer;
begin
  Caption := IntToStr(SpinEdit1.Value);
  A       := StrToInt(SpinEdit1.Text)
end;
Pero de ningún modo usando la función StrToIntDef ya que si no se puede realizar la conversión el valor devuelto es el designado por defecto (0).

Saludos. :)

oscarac 15-05-2013 21:47:50

Hola Ecfisa
lo que comenta el amigo, es que si en el SpinEdit presionas la tecla Del o Supr
ahi genera el error, ya lo probe y efectivamente aparece el error
pero con el codigo que le puse ya no aparece

darkmaster360 15-05-2013 22:00:10

Hola a todos.

Gracias oscarac tu código me funciono ^\||/
No se parece en nada a otros que encontré en los demás sitios que mire. Gracias a ti también ecfisa ^\||/

Saludos.

oscarac 15-05-2013 22:01:10

de nada
me alegra haber sido de ayuda

ecfisa 15-05-2013 22:01:50

Cita:

Empezado por oscarac (Mensaje 460513)
Hola Ecfisa
lo que comenta el amigo, es que si en el SpinEdit presionas la tecla Del o Supr
ahi genera el error, ya lo probe y efectivamente aparece el error
pero con el codigo que le puse ya no aparece

Si si Oscar, eso mismo creí entender.

Pero por mas que intenté no pude lograr el error con el código que nos menciona:
Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
  A: Integer;
begin
  Timer1.Interval := SpinEdit1.Value;
  A := StrToIntDef(SpinEdit1.Text, 0)
end;
(Omití el bloque de protección try ... except por que no hace al error)

Saludos. :)

dec 15-05-2013 22:07:12

Hola,

Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
  A: Integer;
begin
  Timer1.Interval := SpinEdit1.Value;
  A := StrToIntDef(SpinEdit1.Text, 0)
end;

¿Para qué demonios sirve ahí la variable "A"? :confused:

darkmaster360 15-05-2013 22:37:16

Se me olvido una cosilla..

Esta línea:
Código Delphi [-]
Timer1.Interval := SpinEdit1.Value;

Donde la incluyo en el código de oscarac:
Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
var i,c:integer;
var s:string;
begin
 begin
 Timer1.Interval := SpinEdit1.Value;
   s:=Tspinedit(sender).text;
   val(s,i,c);
   if c <> 0 then
   begin
     Tspinedit(sender).value:=Tspinedit(sender).tag;
     beep;
   end
   else
     Tspinedit(sender).tag:=i;
 end;
end;

Porque probé y aunque pueda cambiar el número del spinedit no cambia el intervalo del timer

Saludos

ecfisa 15-05-2013 23:20:39

Hola darkmaster360.

Sigo insistiendo que este código no tendría que darte problemas:
Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
  A: Integer;
begin
  Timer1.Interval := SpinEdit1.Value;
  A := StrToIntDef(SpinEdit1.Text, 0)
end;

Pero bueno... Este es otro modo de hacer lo mismo que consultas:
Código Delphi [-]
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
  A: Integer;
begin
  Timer1.Interval := SpinEdit1.Value;
  if not TryStrToInt(SpinEdit1.Text, a) then
    A := 0;
end;
Y también tengo la misma intriga que dec... ¿ Para que es toda esa movida de la variable "A" ? :)

Saludos.

oscarac 15-05-2013 23:28:25

Cita:

Empezado por ecfisa (Mensaje 460526)
Y también tengo la misma intriga que dec... ¿ Para que es toda esa movida de la variable "A" ? :)

quiza la utiliza en otra instancia

ecfisa 15-05-2013 23:38:00

Cita:

Empezado por oscarac (Mensaje 460528)
quiza la utiliza en otra instancia

Si, seguramente es así. Pero lo que no me queda claro es por que complicarse con la conversión de la propiedad Text si ya tiene el valor como entero en la propiedad Value.

Y como le sugerí en el mensaje #5, basta con hacer
Código Delphi [-]
   A := SpinEdit1.Value;
para tener asignado el valor en la variable "A" sin la posibilidad de errores de conversión.

Saludos :)

darkmaster360 16-05-2013 18:54:23

Hola ecfisa.

El código que puse al principio si que me funcionaba pero me daba error porque tenía la línea:
Código Delphi [-]
Timer1.Enabled := SpinEdit1.Value;

Es esa línea probé quitandola y me funciona el código pero no me sirve el spinedit si no me cambia el intervalo del timer, también probé con los demás que me habéis ido pasando y me pasa lo mismo es esa línea.

También probé poniendo lo que me proponías en el mensaje #5 de poner:
Código Delphi [-]
A := SpinEdit1.Value;

Pero me sigue dando error

Saludos

dec 16-05-2013 19:00:10

Hola,

Cita:

Empezado por oscarac (Mensaje 460528)
quiza la utiliza en otra instancia

No lo entiendo: ¿no se trata de una variable local del procedimiento? ¿Cómo puede usarse fuera del mismo entonces? :confused:

ecfisa 16-05-2013 23:12:00

Cita:

Empezado por darkmaster360 (Mensaje 460556)
Hola ecfisa.

El código que puse al principio si que me funcionaba pero me daba error porque tenía la línea:
Código Delphi [-]
Timer1.Enabled := SpinEdit1.Value;

Es esa línea probé quitandola y me funciona el código pero no me sirve el spinedit si no me cambia el intervalo del timer, también probé con los demás que me habéis ido pasando y me pasa lo mismo es esa línea.

También probé poniendo lo que me proponías en el mensaje #5 de poner:
Código Delphi [-]
A := SpinEdit1.Value;

Pero me sigue dando error

Saludos

Hola.

La verdad, no sé que decirte. Será la versión de Delphi o un problema de instalación ... :confused:

No veo manera que la propiedad Value de tipo Integer genere el error "Is not a valid integer value" cuando se le está asignando su contenido a una variable de tipo Integer...

Saludos. :)


La franja horaria es GMT +2. Ahora son las 00:34:35.

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