TeeChart for ActiveX, COM and ASP
-
nefis
- Newbie
- Posts: 62
- Joined: Wed Oct 22, 2003 4:00 am
- Location: chicago
Post
by nefis » Fri Jan 16, 2004 7:42 am
Hello,
Try the code below. It's supposed to show crosshair cursor on multimpl custom axes. But it shows a moving verical cursor and immovable horizontal one. What's the problem?
nefis
Code: Select all
Private Sub Command1_Click()
TChart1.Axis.Right.StartPosition = 0
TChart1.Axis.Right.EndPosition = 50
Call TChart1.AddSeries(scLine)
TChart1.Series(1).FillSampleValues 100
Call TChart1.Axis.AddCustom(False)
TChart1.Axis.Custom(0).Otherside = True
TChart1.Axis.Custom(0).StartPosition = 50
TChart1.Axis.Custom(0).EndPosition = 100
TChart1.Series(1).VerticalAxisCustom = 0
TChart1.Tools.Items(0).asTeeCursor.Series = Array(0, 1)
End Sub
Private Sub Form_Load()
TChart1.Aspect.View3D = False
TChart1.Legend.Visible = False
Call TChart1.AddSeries(scCandle)
TChart1.Series(0).FillSampleValues 100
TChart1.Series(0).VerticalAxis = aRightAxis
TChart1.Axis.Left.MaximumOffset = 5
TChart1.Axis.Left.MinimumOffset = 5
TChart1.Axis.Bottom.MaximumOffset = 50
Call TChart1.Tools.Add(tcCursor)
TChart1.Tools.Items(0).asTeeCursor.FollowMouse = True
TChart1.Tools.Items(0).asTeeCursor.Series = Array(0) 'Array(TChart1.Series(0), TChart1.Series(1))
TChart1.Tools.Items(0).asTeeCursor.Style = cssBoth
End Sub
-
Pep
- Site Admin
- Posts: 3303
- Joined: Fri Nov 14, 2003 5:00 am
-
Contact:
Post
by Pep » Fri Jan 16, 2004 9:28 am
Hi Nefis,
the problem here is that there's not any series assigned to the TeeCursor, assign it to any using :
TChart1.Tools.Items(0).asTeeCursor.Series = TChart1.Series(0)
it will work fine.
But if you want to have a cursor that allow you to move around the entire chart with custom axis you should use the Canvas techniques as in the following example instead of the TeeCursor Tool :
Code: Select all
Dim MyX, MyY As Long
Private Sub Form_Load()
With TChart1
.Aspect.View3D = False
.AddSeries scLine
.AddSeries scLine
.AddSeries scLine
.Series(0).FillSampleValues 100
.Series(1).FillSampleValues 100
.Series(2).FillSampleValues 100
.Series(0).VerticalAxisCustom = .Axis.AddCustom(False)
.Series(1).VerticalAxisCustom = .Axis.AddCustom(False)
.Series(2).VerticalAxisCustom = .Axis.AddCustom(False)
.Axis.Custom(0).EndPosition = 100
.Axis.Custom(0).StartPosition = 66
.Axis.Custom(0).AxisPen.Color = .Series(0).Color
.Axis.Custom(1).EndPosition = 66
.Axis.Custom(1).StartPosition = 33
.Axis.Custom(1).AxisPen.Color = .Series(1).Color
.Axis.Custom(2).EndPosition = 33
.Axis.Custom(2).StartPosition = 0
.Axis.Custom(2).AxisPen.Color = .Series(2).Color
.Panel.MarginLeft = 10
End With
End Sub
Private Sub TChart1_OnAfterDraw()
With TChart1
.Canvas.Pen.Color = vbCyan
.Canvas.MoveTo MyX, .Axis.Top.Position
.Canvas.LineTo MyX, .Axis.Bottom.Position
.Canvas.MoveTo .Axis.Left.Position, MyY
.Canvas.LineTo .Axis.Right.Position, MyY
End With
End Sub
Private Sub TChart1_OnBeforeDrawSeries()
With TChart1
.Canvas.ClipRectangle .Axis.Left.Position, .Axis.Top.Position,
.Axis.Right.Position, .Axis.Bottom.Position
End With
End Sub
Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X
As Long, ByVal Y As Long)
MyX = X
MyY = Y
TChart1.Repaint
End Sub
-
nefis
- Newbie
- Posts: 62
- Joined: Wed Oct 22, 2003 4:00 am
- Location: chicago
Post
by nefis » Fri Jan 16, 2004 12:24 pm
Pep wrote:Hi Nefis,
the problem here is that there's not any series assigned to the TeeCursor, assign it to any using :
TChart1.Tools.Items(0).asTeeCursor.Series = TChart1.Series(0)
it will work fine.
Of course there is the assignation.
Code: Select all
Private Sub Form_Load()
TChart1.Aspect.View3D = False
TChart1.Legend.Visible = False
Call TChart1.AddSeries(scCandle)
TChart1.Series(0).FillSampleValues 100
TChart1.Series(0).VerticalAxis = aRightAxis
TChart1.Axis.Left.MaximumOffset = 5
TChart1.Axis.Left.MinimumOffset = 5
TChart1.Axis.Bottom.MaximumOffset = 50
Call TChart1.Tools.Add(tcCursor)
TChart1.Tools.Items(0).asTeeCursor.FollowMouse = True
the "missing" statement
Code: Select all
TChart1.Tools.Items(0).asTeeCursor.Series = Array(0) 'Array(TChart1.Series(0), TChart1.Series(1))
Code: Select all
TChart1.Tools.Items(0).asTeeCursor.Style = cssBoth
End Sub
Addidtionally, the help says
The Series array property is the list of Series to which Tool belongs. A Tool will only be associated with these series points.
Series property can be nil (none) applying the Tool globally to the Chart.
TeeChart Pro ActiveX Control Documentation. Copyright 1997-2003 Steema Software SL.
nefis
-
nefis
- Newbie
- Posts: 62
- Joined: Wed Oct 22, 2003 4:00 am
- Location: chicago
Post
by nefis » Sun Jan 18, 2004 4:22 pm
still waiting...
-
Christopher
- Site Admin
- Posts: 1349
- Joined: Thu Jan 01, 1970 12:00 am
- Location: Riudellots de la Selva, Catalonia
-
Contact:
Post
by Christopher » Mon Jan 19, 2004 4:36 pm
Hi --
You could try working around this problem using code similar to the following:
Code: Select all
Private Sub Command1_Click()
TChart1.Axis.Right.StartPosition = 0
TChart1.Axis.Right.EndPosition = 50
Call TChart1.AddSeries(scLine)
TChart1.Series(1).FillSampleValues 100
Call TChart1.Axis.AddCustom(False)
TChart1.Axis.Custom(0).Otherside = True
TChart1.Axis.Custom(0).StartPosition = 50
TChart1.Axis.Custom(0).EndPosition = 100
TChart1.Series(1).VerticalAxisCustom = 0
TChart1.Tools.Items(0).asTeeCursor.Series = Array(0, 1)
End Sub
Private Sub Form_Load()
TChart1.Aspect.View3D = False
TChart1.Legend.Visible = False
Call TChart1.AddSeries(scCandle)
TChart1.Series(0).FillSampleValues 100
'Workaround
TChart1.Series(0).VerticalAxis = aBothVertAxis
TChart1.Axis.Left.Labels.Visible = False
TChart1.Axis.Left.MaximumOffset = 5
TChart1.Axis.Left.MinimumOffset = 5
TChart1.Axis.Bottom.MaximumOffset = 50
Call TChart1.Tools.Add(tcCursor)
TChart1.Tools.Items(0).asTeeCursor.FollowMouse = True
TChart1.Tools.Items(0).asTeeCursor.Series = Array(0) 'Array(TChart1.Series(0), TChart1.Series(1))
TChart1.Tools.Items(0).asTeeCursor.Style = cssBoth
End Sub
-
nefis
- Newbie
- Posts: 62
- Joined: Wed Oct 22, 2003 4:00 am
- Location: chicago
Post
by nefis » Tue Jan 20, 2004 7:05 am
Hello Chris,
the code is an improve but it still doesn't work as intended. When second line is added it ovelaps candle series. To fix it I've added a couple of lines
Code: Select all
Private Sub Command1_Click()
TChart1.Axis.Right.StartPosition = 0
TChart1.Axis.Right.EndPosition = 70
'Added code
TChart1.Axis.Left.StartPosition = 0
TChart1.Axis.Left.EndPosition = 70
'end added code
Call TChart1.AddSeries(scLine)
TChart1.Series(1).FillSampleValues 100
Call TChart1.Axis.AddCustom(False)
TChart1.Axis.Custom(0).Otherside = True
TChart1.Axis.Custom(0).StartPosition = 70
TChart1.Axis.Custom(0).EndPosition = 100
TChart1.Series(1).VerticalAxisCustom = 0
TChart1.Tools.Items(0).asTeeCursor.Series = Array(0, 1)
End Sub
but the result is frustrating. It draws the crosshair for the candle series only 8(
nefis
-
Christopher
- Site Admin
- Posts: 1349
- Joined: Thu Jan 01, 1970 12:00 am
- Location: Riudellots de la Selva, Catalonia
-
Contact:
Post
by Christopher » Tue Jan 20, 2004 9:30 am
Hi --
but the result is frustrating. It draws the crosshair for the candle series only 8(
This issue has been discussed frequently in the past; try going to:
http://www.tamaracka.com/search.htm
and doing a search for:
cursor custom axes ^*teechart* ^*activex*
Basically, this is because Cursor Tools cannot operate across Custom
Axes. You will need to draw your own "Cursor Tool" in a manner similar to the following:
Code: Select all
Private Sub Form_Load()
Dim Axis As Integer
With TChart1
.Aspect.View3D = False
.AddSeries scLine
.AddSeries scLine
.AddSeries scLine
.Series(0).FillSampleValues (1000)
.Series(1).FillSampleValues (1000)
.Series(2).FillSampleValues (1000)
' create the axes...
Axis = .Axis.AddCustom(False)
.Axis.Custom(Axis).StartPosition = 30
.Axis.Custom(Axis).EndPosition = 60
.Axis.Custom(Axis).AxisPen.Color = .Series(1).Color
.Series(1).VerticalAxisCustom = Axis
Axis = .Axis.AddCustom(False)
.Axis.Custom(Axis).StartPosition = 60
.Axis.Custom(Axis).EndPosition = 100
.Axis.Custom(Axis).AxisPen.Color = .Series(2).Color
.Series(2).VerticalAxisCustom = Axis
.Axis.Left.EndPosition = 30
End With
End Sub
Private Sub TChart1_OnAfterDraw()
With TChart1
.Canvas.Pen.Color = vbCyan
.Canvas.Pen.Width = 3
.Canvas.MoveTo .MousePosition.X, .Axis.Top.Position
.Canvas.LineTo .MousePosition.X, .Axis.Bottom.Position
End With
End Sub
Private Sub TChart1_OnBeforeDrawSeries()
With TChart1
.Canvas.ClipRectangle .Axis.Left.Position, .Axis.Top.Position, .Axis.Right.Position, .Axis.Bottom.Position
End With
End Sub
Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
TChart1.Repaint
End Sub