Page 1 of 1

NO HAY MANERA

Posted: Tue Mar 04, 2008 10:31 pm
by 15047158
NARCIS NO CONSIGO LO DE DIBUJAR LA LINEA CON EL TEXTO ENCIMA Y QUE ESTE TEXTO SIGA LA LINEA POR EL AXI.

EL TIPO DE GRAFICO ES CANDESTICK

A VER SI ES POSIBLE QUE ME MANDES UN EJEMPLO

ACCION A REALIZAR:

DIBUJAR UNA LINEA Y PONER ENCIMA UN TEXTO "Soporte"

Pq yo no lo consigo..

Un saludo
JORDI

Posted: Wed Mar 05, 2008 10:25 am
by yeray
Hola Jordi,

Primero un par de consideraciones que te agradeceriamos que tuvieras en cuenta, por la comodidad de todos.
-Por favor, publica las respuestas referentes al mismo problema como "reply" dentro del mismo hilo del foro. Abrir diferentes hilos para una misma pregunta no nos ayuda a ver el progreso del tema.
-Intenta escribir utilizando menos las mayúsculas. Como ya debes saber, se consideran gritos. Y no creemos, ni nos gustaria, haberte hecho enfadar...

Bueno, al tema. Si he entendido bien, en tu gráfico, deseas que, haciendo click sobre él, te aparezca una linea que vaya a un texto donde ponga "Soporte Y" (siendo Y el valor correspondiente al eje). Y deseas que al hacer Scroll con el botón derecho del mouse, todo se mueva.
Bien, dices que has dibujado la linea y que ahora tienes problemas con el texto. Pues yo te sugeriria que utilizaras la Annotation Tool que creo que seria la herramienta más acorde a lo que (creo) intentas hacer.

Aqui te pongo el ejemplo de cómo lo haria yo. Calculo la posicion de las annotations haciendo la diferencia entre las X anteriores y las que tiene el mouse en cada momento y de la misma forma con las Y. Es decir, que en OnMouseDown me guardo la posicion "vieja" y en OnMouseMove guardo la posicion "nueva" y la diferencia entre ambas será lo que habrá que mover cada annotation. Ten en cuenta que ésta forma de calcular no funcionaria bien al hacer zoom o unzoom, y por eso lo desactivo. Porque utilizar el desplazamiento del mouse como referencia, no seria la forma de atacar el problema si quisieras utilizar el zoom. Para ello, deberias guardar la posicion de cada annotation respecto a los ejes en una variable para cada eje y annotation, con lo que el gasto extra de memória seria proporcional al numero de annotations que permitas.

Code: Select all

Dim XDown, YDown, XActual, YActual As Double
Private Sub Form_Load()
  With TChart1
    .Aspect.View3D = False
    .Zoom.Enable = False
    .AddSeries scCandle
    .Series(0).FillSampleValues 10
    .Legend.Visible = False
  End With
End Sub


Private Sub TChart1_OnMouseDown(ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  XDown = X
  YDown = Y
End Sub

Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  XActual = X
  YActual = Y
End Sub

Private Sub TChart1_OnMouseUp(ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  If XDown = X And YDown = Y Then
    If Button = mbLeft Then
    With TChart1.Tools
      .Add tcAnnotate
      With .Items(.Count - 1).asAnnotation
        .Callout.Arrow.Visible = True
        .Callout.Arrow.Color = vbBlack
        .Callout.XPosition = X
        .Callout.YPosition = Y
        .Left = X - 200
        .Top = Y - ((.Bounds.Bottom - .Bounds.Top) / 2)
        .Text = "Soporte " + Str$(FormatNumber(TChart1.Axis.Left.CalcPosPoint(Y), 2))
      End With
    End With
  End If
  End If
End Sub

Private Sub TChart1_OnScroll()
Dim i As Integer
  With TChart1.Tools
    For i = 0 To .Count - 1
      With .Items(i).asAnnotation
        .Left = .Left + (XActual - XDown)
        .Top = .Top + (YActual - YDown)
        .Callout.XPosition = .Callout.XPosition + (XActual - XDown)
        .Callout.YPosition = .Callout.YPosition + (YActual - YDown)
      End With
    Next i
    
    XDown = XActual
    YDown = YActual
  End With
End Sub