Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   como conseguir introducir valores negativos en un edit (https://www.clubdelphi.com/foros/showthread.php?t=4696)

haffo 24-10-2003 00:35:57

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.

delphi.com.ar 24-10-2003 00:49:22

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?

Ruben_Cu 24-10-2003 01:11:14

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;

o, por ejemplo con la tecla enter:
Código:

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key=vk_return then trackbar1.Position:=StrToInt(edit1.Text);
end;

Espero que ahí ande tu solución.
Saludos

jachguate 24-10-2003 01:15:45

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.

;)

roman 24-10-2003 01:28:07

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!

:D

haffo 24-10-2003 01:39:19

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.

Ruben_Cu 24-10-2003 01:40:44

Cita:

Posteado originalmente por roman
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!

:D

¿Y tú no piensas apostar en esta?:) :D

roman 24-10-2003 01:45:43

Cita:

Posteado originalmente por Ruben_Cu
¿Y tú no piensas apostar en esta?:) :D
¡No! Yo sólo soy el 'dealer'

¡El ganadoooor! Ruben_Cu

// Saludos

roman 24-10-2003 01:51:53

Cita:

Posteado originalmente por haffo
es raro porque tengo varios scrollbar de la misma manera y funcionan bien aunque estos no tienes valores negativos.
Exacto! Es como dice Ruben_Cu, dado que sólo tienes números positivos en el evento OnChange el valor de Edit3.Text siempre es un número correcto (bueno, casi siempre, prueba a borrar el texto del Edit3) mientras que con números negativos, al introducir el signo '-' la conversión StrToInt falla porque '-' no es un número.

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

delphi.com.ar 24-10-2003 02:12:56

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}

Para los Competidores:
Vale aclarar que mi punto tambien puede darse como ganador... pues ¿En que momento se produce el error?.... mas que obvia la respuesta :D

haffo 24-10-2003 03:38:01

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 :D .

Gracias de nuevo, nunca me cansaré de dárosla.

:p

En cuanto a lo de cambiar el color del trackbar, sabeis cómo hacerlo.


La franja horaria es GMT +2. Ahora son las 17:51:20.

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