FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Tchart y cálculo de valores en coordenadas del ratón (mouse)
Bueno, antes de nada comentar que no se porque el código para colocar imágenes está desactivado. En este post van dos imágenes, así q para verlas hay que hacer click en el enlace, y el post queda un poco deslucido. Solo es un comentario, nada más. Bueno, al grano
Tchart con varias series dibujadas. Mi intención es intentar calcular el valor de cada serie en el corte entre la serie y la X del ratón. Me explico, cuando paso el ratón por la gráfica este tiene unas coordenadas X e Y. La coordenada Y no me interesa, pero la X si ya que si pongo el puntero en un pixel determinado quiero que se me calcule el valor de cada serie a la misma altura X que la del ratón. Obtener las coordenadas X e Y del ratón es sencillo: Código:
chartGraficos.Canvas.Pixels[i,j]; Las coordenadas del canvas, o tchart, o lo que sea empiezan en la flecha azul superior de la imagen. Las coordenadas de la flecha azul inferior seguro que son facilmente calculables. Pero lo que a mi me interesa son las coordenadas de las flechas rojas, es decir las coordenadas en el canvas del origen (el punto 0,0) y las coordenadas de la parte de arriba del gráfico, ya que como el gráfico es autoajustable al mayor de los valores de la gráficas, al tener el mayor valor de la gráfica y su x,y en el canvas y al tener el x,y en el canvas del 0,0 podemos calcular el valor en cada punto mediante una regla de tres ¿Me explico bien? Pasemos al segundo problema, dando por hecho que hemos resuelto el primero. Echad un ojo a esta otra imagen: Aquí muestro un zoom hecho al seleccionar con el ratón una parte del gráfico. ¿Ahora como hago para calcular los valores? Porque ya no tengo el punto 0,0, no el mayor valor de las series. Aquí de momento no tengo ideas para intentar solucionarlo. ¿Alguna idea? Espero haber planteado bien el problema para q se entienda. Gracias de antemano por las posibles respuestas |
#2
|
|||
|
|||
Código:
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xx, yy1, yy2: Double; idx: TValuePos; begin {Screen coord -> Plot coord} xx := Chart1.BottomAxis.CalcPosPoint(X); {Binary search and interpolation (units in attachment) } yy1 := ValueAt(ArrayAdapter(Series1, 'x'), ArrayAdapter(Series1, 'y'), xx); {or} if BinSearch(ArrayAdapter(Series2, 'x'), xx, idx) then yy2 := ValueAt(ArrayAdapter(Series2, 'y'), idx) else yy2 := NaN; // out of range Caption := Format('%.3f %.3f %.3f', [xx, yy1, yy2]); end; Última edición por rounin fecha: 06-10-2008 a las 14:05:13. |
#3
|
|||
|
|||
Hey Rounin esto tiene muy buena pinta, busqueda binaria, interpolación...unas units muy útiles. Pero tengo un problema, en el IntegerFn y en el DoubleFn hay una directiva include
Código:
{$INCLUDE Fn.inc} Muchas gracias de antemano, si esto funciona va a quedar muy muy chulo |
#4
|
|||
|
|||
¿Será porque uso Delphi5? ¿Alguien con otra versión más actual tiene ese fichero?
|
#5
|
|||
|
|||
Eso es mi archivo, un parte de libreria de algoritmos genericos.
Última edición por rounin fecha: 06-10-2008 a las 14:05:13. |
#6
|
|||
|
|||
Esto funciona Rounin, eres un crack! , solo me queda configurarlo para que me muestre las coordenadas de las gráficas que tengo pintadas y poco más.
Muchas gracias por la ayuda, este post puede ayudar a mucha gente que quiere hacer algo similar con el TChart. |
#7
|
|||
|
|||
¿Se puede saber qué serie está debajo del puntero del ratón?
Reflotando este hilo de hace ya casi 9 meses, me gustaría preguntar al foro si se puede saber qué serie es la que está siendo apuntada por el ratón en ese momento.
Esto que pregunto es útil cuando se representan muchas series en un gráfico de líneas, por ejemplo 20 ó 30 y aún con los colores no son suficiente para distinguir tantas líneas. Entonces, tú pones el ratón encima de una serie y en el hint o en un label, te dice qué serie es esa. Lo que hace Excel con los gráficos, vamos. Gracias de antemano. Un saludo. |
#8
|
||||
|
||||
Hola Angel Fernandez, puedes utilizar la función Clicked de la serie, ejemplo, digamos que tenemos dos series (Series1, Series2) en un Chart.
Estoy utilizando el evento OnClickSeries, por lo que se va ejecutar cuando hagas click sobre alguna de las series, pero tu puedes utilizar otro evento como OnMouseMove... Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#9
|
|||
|
|||
Muchas gracias Caro, tu código me ha resuelto el problema.
Con tu permiso lo he depurado un poco. Muestra en un hint el título de la serie sobre la que hacer clic: Colocar este código en el evento chart1.clickseries
Un saludo. |
#10
|
||||
|
||||
No tienes que pedir permiso amiguito, me alegra que te haya servido .
Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
mover VertScrollBar con la rueda del ratón (mouse) | TrUnkS | OOP | 3 | 27-02-2007 04:46:34 |
Coordenadas TWebBrowser | Delar | Varios | 2 | 03-11-2006 21:26:23 |
Coordenadas en el PaintBox | fabiof2000 | Gráficos | 2 | 27-09-2006 10:08:03 |
pasar coordenadas gps a coordenadas builder | iaav1 | C++ Builder | 3 | 03-07-2006 19:59:02 |
Representar coordenadas 3D | blueicaro | OOP | 5 | 20-04-2006 17:03:14 |
|