Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 11-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
¿¿Y si lo trabajas del -20 al +20 y el valor lo divides por 10??
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 11-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 11-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 11-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
haffo comentó:
¿Qué hago para dividir entre 10 ?. Aún soy novato, jejeje.
En mis tiempos esto lo enseñaban en la primaria

// Saludos
Responder Con Cita
  #6  
Antiguo 11-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
¿Donde puedo obtener el edit de las RxLibs?, porque no hay otra forma de hacerlo con el edit normal, verdad?
Responder Con Cita
  #7  
Antiguo 11-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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:



Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 11-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 11-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
Unhappy

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.
Responder Con Cita
  #10  
Antiguo 11-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #11  
Antiguo 12-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
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.
Responder Con Cita
  #12  
Antiguo 12-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
Alguna sugerencia por favor. Necesito solucionar este problema. Gracias.
Responder Con Cita
  #13  
Antiguo 12-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #14  
Antiguo 12-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
Gracias Roman pero me da un error:

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

En los dos procedimientos.
Responder Con Cita
  #15  
Antiguo 12-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
Puede ser que sea porque tengo una LMDTrackbar ??
Responder Con Cita
  #16  
Antiguo 12-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
Ya lo he arreglado . Gracias por todo.
Responder Con Cita
  #17  
Antiguo 12-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
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.
Responder Con Cita
  #18  
Antiguo 12-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #19  
Antiguo 12-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
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..........
Responder Con Cita
  #20  
Antiguo 19-11-2003
haffo haffo is offline
Miembro
 
Registrado: oct 2003
Posts: 54
Poder: 21
haffo Va por buen camino
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:58:25.


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
Copyright 1996-2007 Club Delphi