Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   trackbar con numeros reales (https://www.clubdelphi.com/foros/showthread.php?t=5173)

haffo 11-11-2003 21:53:09

trackbar con numeros reales
 
Hola a todos. Tengo una trackbar con números enteros desde el -10 al 10 pero necesito cambiarla para tener valores reales desde el -2 al 2 (-2, -1.9, -1.8, -1.7........., 1.7,1.8,1.9,2). ¿Se puede hacer con trackbar, además esta es una de la librería LMD?. Si no se puede tendré que hacerlo con una scrollbar, si es que se puede claro.

Gracias por anticipado , un saludo a todos.

delphi.com.ar 11-11-2003 21:56:45

¿¿Y si lo trabajas del -20 al +20 y el valor lo divides por 10??

haffo 11-11-2003 22:07:41

El problema es el siguiente, es que tengo la trackbar sincronizada con un edit, y el procedimiento del edit es el siguiente:

procedure TForm1.Edit3Change(Sender: TObject);
begin
LMDTrackBar1.Position:=StrToIntDef(edit3.text, LMDTrackBar1.Position);
ganancia := LMDTrackBar1.Position;
end;

¿Qué hago para dividir entre 10 ?. Aún soy novato, jejeje.

Gracias.

delphi.com.ar 11-11-2003 22:12:35

Te recomiendo, en lugar de usar un TEdit, utilizar un TCurrencyEdit de las RxLibs, y en ese caso:

Código:

procedure TForm1.Edit3Change(Sender: TObject);
begin
  LMDTrackBar1.Position:= Trunc(Edit3.Value*10);
  ganancia := LMDTrackBar1.Position div 10;
end;


Saludos!

roman 11-11-2003 22:26:58

Cita:

haffo comentó:
¿Qué hago para dividir entre 10 ?. Aún soy novato, jejeje.

En mis tiempos esto lo enseñaban en la primaria :D

// Saludos

haffo 11-11-2003 22:50:01

¿Donde puedo obtener el edit de las RxLibs?, porque no hay otra forma de hacerlo con el edit normal, verdad?

delphi.com.ar 11-11-2003 22:57:45

Si puedes hacerlo con un edit normal, con el CurrencyEdit, será mucho mas fácil y estético.


Código:

procedure TForm1.Edit3Change(Sender: TObject);
begin
  LMDTrackBar1.Position:=Trunc(StrToFloatDef(edit3.text, LMDTrackBar1.Position div 10)*10);
  ganancia := LMDTrackBar1.Position div 10;
end;


Creo que en las últimas versiones de Delphi, apareció la funcion StrToFloatDef, yo trabajo en Delphi 5 así que no te lo puedo confirmar.


Román:
:D :D :D


Saludos!

delphi.com.ar 11-11-2003 23:02:21

Me olvidaba, en la página de Cadetill http://www.clubdelphi.com/users/cadetill/compoutil.php, tienes las direcciones para bajar las RxLib´s.

Saludos!

haffo 11-11-2003 23:22:10

He probado el código que has puesto Román pero al pulsar la trackbar se me va directamente al valor 20. Y en el edit me pone un 20. :(

roman 11-11-2003 23:58:57

Cita:

haffo comentó:
He probado el código que has puesto Román pero al pulsar la trackbar se me va directamente al valor 20. Y en el edit me pone un 20. :(
Bueno, yo no he puesto ningún código. Ahora que no sabemos que tienes en el evento OnChange del trackbar. Quizá hay un conflicto de intereses :) :

el OnChange del trackbar genera el OnChange del Edit que a su vez genera el del trackbar

// Saludos

haffo 12-11-2003 00:22:16

:confused: Ufff que lio, jeje, es cierto el código era de delphi.com.ar, lo siento. el código es el siguiente:

procedure TForm1.Edit3Change(Sender: TObject);
begin

LMDTrackBar1.Position:=Trunc(StrToFloatDef(edit3.text, LMDTrackBar1.Position div 10)*10);
ganancia := LMDTrackBar1.Position div 10;

end;

procedure TForm1.LMDTrackBar1Change(Sender: TObject);
begin
edit3.text:=inttostr(LMDTrackbar1.position);
ganancia:=LMDtrackbar1.Position;
end;

El evento de la trackbar es LMDtrackbar1change y el del edit edit3change. Tendré que dividir por 10 el procedure del edit 3, como lo hago? es que es una string.

Gracias por tu ayuda.

haffo 12-11-2003 02:39:38

Alguna sugerencia por favor. Necesito solucionar este problema. Gracias.

roman 12-11-2003 03:56:19

Código:

TrackBar.Min := -20;
TrackBar.Max := 20;

...

procedure TForm1.TrackBarChange(Sender: TObject);
var
  Value: Double;

begin
  Value := TrackBar.Position / 10;
  Edit.Text := FloatToStr(Value);
end;

procedure TForm1.EditChange(Sender: TObject);
var
  Value: Double;

begin
  Value := StrToFloatDef(Edit.Text, -10);
  if (Value >= -2) and (Value <= 2) then
    TrackBar.Position := Trunc(10*Value);
end;

Y si tu versión de Delphi no tiene la función StrToFloatDef la defines tú mismo:

Código:

function StrToFloatDef(S: String; Def: Double): Double;
begin
  try
    Result := StrToFloat(S);
  except
    Result := Def;
  end;
end;

// Saludos

haffo 12-11-2003 11:04:08

Gracias Roman pero me da un error:

"[Error] Final.pas(145): Undeclared identifier: 'Position'.

En los dos procedimientos.

haffo 12-11-2003 11:17:35

Puede ser que sea porque tengo una LMDTrackbar ??

haffo 12-11-2003 11:39:39

Ya lo he arreglado . Gracias por todo.

haffo 12-11-2003 12:02:22

Aunque sigue habiendo un pequeño problema. Y es que cuando modifico el edit la trackbar no cambia. He probado con el evento onexit en el edit pero no va. Si pongo el evento onchange cuando pulso el 0 para poner 0.3 por ejemplo se va directamente al cero pero no al 0.3.

roman 12-11-2003 17:29:15

Cita:

haffo comentó:
Aunque sigue habiendo un pequeño problema. Y es que cuando modifico el edit la trackbar no cambia. He probado con el evento onexit en el edit pero no va. Si pongo el evento onchange cuando pulso el 0 para poner 0.3 por ejemplo se va directamente al cero pero no al 0.3.
Yo no sé qué tantas diferencias haya entre el TrackBar estándar y el que está usando aunque este último tendría que añadir funcionalidad más que alterar la ya existente. Tal como te puse el código funciona sin ningún problema. Lo de que el trackbar se ponga en cero cuando escribes 0 es totalmente lógico pues así es como está diseñado ya que tú deseas que se actualice en el evento OnChange del Edit y este evento ocurre ante cualquier modificación del edit. Es imposible que el evento prediga lo que finalmente va a escribir el usuario. Si el usuario desea escribir 1.8, al escribir el 1 el evento no tiene manera de saber que en realidad quiere 1.8 y estando 1 dentro del rango permitido coloca al trackbar en dicha posición.

Si no quieres este comportamiento entonces usa el evento OnExit y, a menos que la componente que usas haga una incorrecta implementación de este evento no veo porque ha de fallar.

// Saludos

haffo 12-11-2003 21:53:25

Ya funciona bien, gracias por todo. El problema era que al introducir los datos en el edit yo ponía 1.3 por ejemplo para poner la parte decimal no es con el . sino con la , . Es decir hay que poner 1,3. Lo siento por mi torpeza.

:) GRACIAS !!!

Ahora tengo otro problema, jejeje, para variar. Lo tengo en otro hilo en el foro Varios, si os animais..........

haffo 19-11-2003 23:53:27

Hola a todos de nuevo. Sigo teniendo un pequeño problema con la dichosa trackbar. He modificado un poco el programa, ahora lo que necesito es una trackbar que va de 0 a 20, pero en realidad quiero que me represente en un edit de 0 a 2, es decir, dividir el valor de la trackbar por 10. El problema es que cuando en la trackbar intento poner el valor 1 o el 2 no me deja. ¿por qué?. El código es el siguiente:

procedure TForm1.LMDTrackBar1Change(Sender: TObject);
begin
edit3.text:=floattostr((LMDTrackbar1.position)/10);
ganancia:=LMDtrackbar1.Position;

procedure TForm1.Edit3Change(Sender: TObject);
begin

LMDTrackBar1.Position:=StrToIntDef(edit3.text, LMDTrackBar1.Position);
ganancia := LMDTrackBar1.Position;
end;

donde ganancia es: integer porque este valor lo mando a un programa en 'C' donde allí ya lo divido por 10.

Gracias de antemano. Saludos.


La franja horaria es GMT +2. Ahora son las 16:50:41.

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