FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
como conseguir introducir valores negativos en un edit
Hola a todos, pues eso que tengo un campo edit que varía al unísono con una trackbar (que por cierto como ya puse en otro post necesito cambiarle el color, si alguien lo sabe..... ), el caso es que la trackbar tiene un rango de -10 a 10, entonces cuando voy a poner en el edit un número negativo, me da error "- is nos a integer value".
Gracias. |
#2
|
||||
|
||||
Un TEdit esta diseñado para aceptar Texto, por lo tanto puede aceptar fácilmente un string que contenga la conversión a texto de un número entero. El problema seguramente surge cuando conviertes el dato... ¿Cómo lo haces?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
Hola, tengo la impresión que estás utilizando el evento OnChange del Edit u otro relacionado con teclas pero mal configurado.
El evento OnChange no lo puedes usar puesto que en cuanto introduzcas el signo '-' te lanzará el error que te aparece. Creo que quieres mover el trackbar al valor introducido en el edit para ello podrías usar un botón para cuando coloques el número completo disparar el evento OnClick, algo como: Código:
procedure TForm1.Button1Click(Sender: TObject); begin trackbar1.Position:=StrToInt(edit1.Text); end; Código:
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=vk_return then trackbar1.Position:=StrToInt(edit1.Text); end; Saludos |
#4
|
||||
|
||||
Seguramente estas introduciendo un espacio antes del número... y no es lo mismo "- 4" (no es un entero válido) que "-4" (si es un entero válido).
Seguramente se debe a eso... Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
||||
|
||||
delphi.com.ar
El problema seguramente surge cuando conviertes el dato Ruben_Cu tengo la impresión que estás utilizando el evento OnChange del Edit u otro relacionado con teclas pero mal configurado jachguate Seguramente estas introduciendo un espacio antes del número ¿Quién da más señores? ¡Hagan sus apuestas! |
#6
|
|||
|
|||
Gracias por contestar
procedure TForm1.Edit3Change(Sender: TObject); begin TrackBar1.Position:=strtoint(edit3.text); ganancia := TrackBar1.Position; Este es el código que tengo puesto, donde ganancia es una variable que no tiene nada que ver, es raro porque tengo varios scrollbar de la misma manera y funcionan bien aunque estos no tienes valores negativos. |
#7
|
|||
|
|||
Cita:
|
#8
|
||||
|
||||
Cita:
¡El ganadoooor! Ruben_Cu // Saludos |
#9
|
||||
|
||||
Cita:
Creo que en tu lugar usaría la función StrToIntDef: TrackBar1.Position:=StrToIntDef(edit3.text, TrackBar.Min); Esta función regresa el segundo parámetro cuando la conversión falla sin marcarte error. De esta manera, cuando comienzas a introducir el número negativo o borras el texto del edit, el Trackbar se ajustará su posición al principio. // Saludos |
#10
|
||||
|
||||
Como recomendación para este tipo de datos, utilizá algún componente que solo te deje ingresar números (Como el TCurrencyEdit de las Rx, o puedes buscar en mi página un TIntEdit, que es para este tipo de datos)
Siempre que conviertas strings a números, que pueda llegar a producir un error, encargate de capturar este error, o si no te interesa el error puedes usar directamente alguna función con Default Value como la que propone Román (StrToIntDef)... o puedes validar que la entrada sean solo números, en lugar de producir una excepción innecesaria. Esta funcioncita es un vestigio de mis orígenes en VB: Código:
function IsNumber(Value: string): Boolean; var fRes : Extended; begin Result := TextToFloat(PChar(Value), fRes, fvExtended); end; {$HINTS OFF} function IsInteger(Value: string): Boolean; var iDummy, iErr : Integer; begin Val(Value, iDummy, iErr); Result := (iErr = 0); end; {$HINTS ON} Vale aclarar que mi punto tambien puede darse como ganador... pues ¿En que momento se produce el error?.... mas que obvia la respuesta
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#11
|
|||
|
|||
Por fin señores, ya lo tengo, al final he puesto lo que dijo Roman pero modificado:
TrackBar1.Position:=StrToIntDef(edit3.text, TrackBar1.Position); Position en vez de Min, y funciona perfectamente . Gracias de nuevo, nunca me cansaré de dárosla. En cuanto a lo de cambiar el color del trackbar, sabeis cómo hacerlo. |
|
|
|