FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
¿¿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. |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
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. |
#5
|
||||
|
||||
Cita:
// Saludos |
#6
|
|||
|
|||
¿Donde puedo obtener el edit de las RxLibs?, porque no hay otra forma de hacerlo con el edit normal, verdad?
|
#7
|
||||
|
||||
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. |
#8
|
||||
|
||||
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. |
#9
|
|||
|
|||
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.
|
#10
|
||||
|
||||
Cita:
el OnChange del trackbar genera el OnChange del Edit que a su vez genera el del trackbar // Saludos |
#11
|
|||
|
|||
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. |
#12
|
|||
|
|||
Alguna sugerencia por favor. Necesito solucionar este problema. Gracias.
|
#13
|
||||
|
||||
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; Código:
function StrToFloatDef(S: String; Def: Double): Double; begin try Result := StrToFloat(S); except Result := Def; end; end; |
#14
|
|||
|
|||
Gracias Roman pero me da un error:
"[Error] Final.pas(145): Undeclared identifier: 'Position'. En los dos procedimientos. |
#15
|
|||
|
|||
Puede ser que sea porque tengo una LMDTrackbar ??
|
#16
|
|||
|
|||
Ya lo he arreglado . Gracias por todo.
|
#17
|
|||
|
|||
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.
|
#18
|
||||
|
||||
Cita:
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 |
#19
|
|||
|
|||
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.......... |
#20
|
|||
|
|||
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. |
|
|
|