Fixing one side of the zoom rectangle?

TeeChart for ActiveX, COM and ASP
Post Reply
PhilOutram
Newbie
Newbie
Posts: 17
Joined: Mon Jun 19, 2006 12:00 am
Location: Auckland

Fixing one side of the zoom rectangle?

Post by PhilOutram » Tue Jul 22, 2008 8:44 pm

Hi,

My tool allows the user to fix any of the axis limits. If, say, they've fixed the min y value at zero, is it possible to ensure that the zoom rectangle always goes to zero on the bottom axis? This is very similar to the Zoom direction feature, but I want to split it in half again, i.e. where Zoom horizontal keeps the Ymax and Ymin values the same and draws the zoom rectangle from top to the bottom of the chart (regardless of where the mouse is), I'd like to be able to keep only one of those values fixed and correspondingly only draw the zoom rectangle to one extent.

I hope this makes sense.

Thanks for any help,
Phil.

Yeray
Site Admin
Site Admin
Posts: 9602
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Post by Yeray » Wed Jul 23, 2008 9:01 am

Hi Phil,

If we understood well, you are trying to do something as following:

Code: Select all

Dim MinLeft As Double
    
Private Sub Form_Load()
  TChart1.Aspect.View3D = False
  
  TChart1.AddSeries scPoint
  TChart1.Series(0).FillSampleValues 25
  
  TChart1.Environment.InternalRepaint
  
  MinLeft = TChart1.Axis.Left.Minimum
  MinBottom = TChart1.Axis.Bottom.Minimum
End Sub


Private Sub TChart1_OnZoom()
  TChart1.Axis.Bottom.AutomaticMinimum = False
  TChart1.Axis.Left.AutomaticMinimum = False
  
  TChart1.Axis.Bottom.Minimum = MinBottom
  TChart1.Axis.Left.Minimum = MinLeft
End Sub
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

PhilOutram
Newbie
Newbie
Posts: 17
Joined: Mon Jun 19, 2006 12:00 am
Location: Auckland

Post by PhilOutram » Thu Jul 24, 2008 8:38 am

Hi,

Thanks for the quick response. This isn't quite what I want to do.

What I'm keen to do is show the user that they have one dimension fixed, so I want to be able to modify the graphical zoom rectangle that is displayed over the graph as the user drags his mouse to create a zoom area...i.e. not just after he's let go of the mouse at OnZoom time.

So I'm talking about changing the zoom rectangle that is drawn ontop of the graph, not the actual zoom rectangle that specifies the new graph extents.

Is it possible to set the dimensions of this displayed rectangle as the user is dragging the mouse?

Many thanks,
Phil.

Yeray
Site Admin
Site Admin
Posts: 9602
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Post by Yeray » Thu Jul 24, 2008 9:38 am

Hi Phil,

Then you should draw your custom Rectangle while the mouse holds down and apply a custom zoom at OnMouseUp event. Something as follows:

Code: Select all

Dim EndX, EndY As Double
Dim Go As Boolean

Private Sub Form_Load()
  TChart1.Aspect.View3D = False
  
  TChart1.AddSeries scPoint
  TChart1.Series(0).FillSampleValues 25
  
  TChart1.Zoom.Enable = False
  Go = False
  
  TChart1.Axis.Bottom.PositionUnits = puPixels
  TChart1.Axis.Left.PositionUnits = puPixels
  TChart1.Axis.Right.PositionUnits = puPixels
  TChart1.Axis.Top.PositionUnits = puPixels
End Sub

Private Sub TChart1_OnAfterDraw()
  If Go Then
    TChart1.Canvas.Pen.Color = vbWhite
    TChart1.Canvas.Brush.Style = bsClear
    TChart1.Canvas.Rectangle TChart1.Axis.Left.Position, EndY, EndX, TChart1.Axis.Bottom.Position
  End If
End Sub

Private Sub TChart1_OnMouseDown(ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  If Button = mbLeft Then
    Go = True
  End If
End Sub

Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  If Go Then
    EndX = X
    EndY = Y
    TChart1.Environment.InternalRepaint
  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 Button = mbLeft Then
    Go = False
    TChart1.Environment.InternalRepaint
    If X > TChart1.Axis.Left.Position And _
       X < TChart1.Axis.Right.Position And _
       Y > TChart1.Axis.Top.Position And _
       Y < TChart1.Axis.Bottom.Position Then
      TChart1.Zoom.ZoomRect TChart1.Axis.Left.Position, Y, X, TChart1.Axis.Bottom.Position
    End If
  End If
End Sub
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

PhilOutram
Newbie
Newbie
Posts: 17
Joined: Mon Jun 19, 2006 12:00 am
Location: Auckland

Post by PhilOutram » Thu Jul 24, 2008 9:43 am

Perfect. Thanks very much.

Post Reply