Page 1 of 1

Capturing values from a selection on a graphic

Posted: Mon May 23, 2011 4:44 pm
by 15059326
We need to select on a graphic in which we have several series FastLine type (in the x-axis are dates and the y-axis are numeric data), using a zoom box or something similar, and capture the minimum and maximum values in each of the axes from the selection

Re: Capturing values from a selection on a graphic

Posted: Tue May 24, 2011 11:25 am
by yeray
Hello JAV,

I'm afraid you should do it manually using the mouse events and the axes CalcPosPoint functions to translate the mouse positions (in pixels) to the axis values. Here you have an example. Note that I've disabled the Zoom feature as it would create some conflicts with the manually drawn rectangle.

Code: Select all

Dim MouseDownX, MouseDownY, MouseActX, MouseActY As Integer

Private Sub Form_Load()  
  TChart1.Aspect.View3D = False
  TChart1.Zoom.Enable = False
  
  Dim i As Integer
  For i = 0 To 3
    TChart1.AddSeries scFastLine
    TChart1.Series(i).XValues.DateTime = True
    TChart1.Series(i).FillSampleValues
  Next i
  
  MouseDownX = -1
  MouseDownY = -1
End Sub

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

Private Sub TChart1_OnAfterDraw()
  If (MouseDownX > -1) And (MouseDownY > -1) Then
    With TChart1.Canvas
      .Brush.Style = bsClear
      .Pen.Style = psDot
      .Pen.Color = vbGrayText
      .Rectangle MouseDownX, MouseDownY, MouseActX, MouseActY
    End With
  End If
End Sub

Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  If (MouseDownX > -1) And (MouseDownY > -1) Then
    MouseActX = X
    MouseActY = Y
    TChart1.Repaint
  End If
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 (MouseDownX < MouseActX) Then
    Caption = "MinX: " + FormatDateTime(TChart1.Axis.Bottom.CalcPosPoint(MouseDownX)) + " - MaxX: " + FormatDateTime(TChart1.Axis.Bottom.CalcPosPoint(MouseActX))
    AddYValuesToCaption
  Else
    Caption = "MinX: " + FormatDateTime(TChart1.Axis.Bottom.CalcPosPoint(MouseActX)) + " - MaxX: " + FormatDateTime(TChart1.Axis.Bottom.CalcPosPoint(MouseDownX))
    AddYValuesToCaption
  End If
  
  MouseDownX = -1
  MouseDownY = -1
End Sub

Private Sub AddYValuesToCaption()
  If (MouseDownY > MouseActY) Then
    Caption = Caption + " - MinY: " + Format(TChart1.Axis.Left.CalcPosPoint(MouseDownY)) + " - MaxY: " + Format(TChart1.Axis.Left.CalcPosPoint(MouseActY))
  Else
    Caption = Caption + " - MinY: " + Format(TChart1.Axis.Left.CalcPosPoint(MouseActY)) + " - MaxY: " + Format(TChart1.Axis.Left.CalcPosPoint(MouseDownY))
  End If
End Sub