using SetNull and Yvalues.Value

TeeChart for ActiveX, COM and ASP
Post Reply
adenin
Newbie
Newbie
Posts: 33
Joined: Mon Jun 11, 2007 12:00 am

using SetNull and Yvalues.Value

Post by adenin » Fri Oct 23, 2009 7:23 am

hello,

I have chart where some points added with AddXY are disabled with SetNull

Then, after firing onmousemove event; Yvalues.value(index) gives former value added with AddXY
Is there way how to display something like N/A ? instead of former value?

Thanks

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

Re: using SetNull and Yvalues.Value

Post by Yeray » Fri Oct 23, 2009 11:37 am

Hi adenin,

You could check if a point is set as null with IsNull function:

Code: Select all

Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  Dim index As Integer
  index = TChart1.Series(0).Clicked(X, Y)
  If index > -1 Then
    If TChart1.Series(0).IsNull(index) Then
      TChart1.Header.Text.Text = "N/A"
    Else
      TChart1.Header.Text.Text = Str$(TChart1.Series(0).YValues.Value(index))
    End If
  Else
    TChart1.Header.Text.Text = "Move the mouse over a point"
  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

adenin
Newbie
Newbie
Posts: 33
Joined: Mon Jun 11, 2007 12:00 am

Re: using SetNull and Yvalues.Value

Post by adenin » Mon Oct 26, 2009 10:32 am

Hello Alonso,

IsNull helped me, but I discovered problem with setnull;
I fill series like this:

.Series(0).AddXY 41, 0.4946055 ,"" , RGB(200,0,0)
.Series(0).AddXY 42, 0.4946055 ,"" , RGB(200,0,0)
.Series(0).AddXY 43, 0.4062691 ,"" , RGB(200,0,0)
.Series(0).AddXY 44, 0.4994978 ,"" , RGB(200,0,0)
.Series(0).SetNull 43

I use stairs chart, and it does not looks like I expect in two areas (42,43) and (43,44)

description of values created in this event

Sub gr_priemer_OnMouseMove(Shift, X, Y)
if fix(gr_priemer.Series(0).XScreenToValue(X))>=0 and fix(gr_priemer.Series(0).XScreenToValue(X))< 107 then
' 1
'
for p=0 to gr_priemer.Series(0).XValues.Count-1
if gr_priemer.Series(0).XScreenToValue(X) < gr_priemer.Series(0).XValues.Value(p) then
if gr_priemer.Series(0).IsNull(p-1) then
h1="N/A"
exit for
else
h1=FormatNumber(gr_priemer.Series(0).YValues.Value(p-1),3)
exit for
end if
end if
next
gr_priemer.Tools.Items(0).asAnnotation.Text = "pozicia:"&Chr(13)& "Elongation:"&Chr(13)&""
gr_priemer.Tools.Items(3).asAnnotation.Text = fix(gr_priemer.Series(0).XScreenToValue(X)) & Chr(13) & h1 & Chr(13) & ""
end if

is ok, but something else is displayed in mentioned areas
please, could you look at that?
I can't attach file with any extension... each is possible attack vector (.html, .html_file,.txt,also without ext)

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

Re: using SetNull and Yvalues.Value

Post by Yeray » Mon Oct 26, 2009 11:28 am

Hi adenin,

I'm not sure to see any problem in the chart that is displayed with the following code:

Code: Select all

Private Sub Form_Load()
  TeeCommander1.Chart = TChart1

  TChart1.Aspect.View3D = False

  TChart1.AddSeries scLine
  TChart1.Series(0).FillSampleValues 10
  TChart1.Series(0).asLine.Stairs = True
  TChart1.Series(0).SetNull 5
  
  For i = 0 To 1
    TChart1.Tools.Add tcAnnotate
    TChart1.Tools.Items(i).asAnnotation.Left = i * 100
  Next
End Sub

Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  If Fix(TChart1.Series(0).XScreenToValue(X)) >= 0 And Fix(TChart1.Series(0).XScreenToValue(X)) < TChart1.Series(0).Count - 1 Then
    For p = 0 To TChart1.Series(0).XValues.Count - 1
      If TChart1.Series(0).XScreenToValue(X) < TChart1.Series(0).XValues.Value(p) Then
        If TChart1.Series(0).IsNull(p - 1) Then
          h1 = "N/A"
          Exit For
        Else
          h1 = FormatNumber(TChart1.Series(0).YValues.Value(p - 1), 3)
          Exit For
        End If
      End If
    Next
    TChart1.Tools.Items(0).asAnnotation.Text = "pozicia:" & Chr(13) & "Elongation:" & Chr(13) & ""
    TChart1.Tools.Items(1).asAnnotation.Text = Fix(TChart1.Series(0).XScreenToValue(X)) & Chr(13) & h1 & Chr(13) & ""
  End If
End Sub
You could try to attach your files in a .zip, .rar or .7zip.
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

adenin
Newbie
Newbie
Posts: 33
Joined: Mon Jun 11, 2007 12:00 am

Re: using SetNull and Yvalues.Value

Post by adenin » Mon Oct 26, 2009 11:53 am

I am attaching mentioned file in zip, pls go with mouse cursor into area between (42,43)
and (43,44) and pls look at displayed values - they are correct according to values set by addxy and setnull.
But, chart is not showing those correct data

thanks in advance
Peter
Attachments
why_.zip
(2.66 KiB) Downloaded 674 times

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

Re: using SetNull and Yvalues.Value

Post by Yeray » Mon Oct 26, 2009 1:06 pm

Hi adenin,

I've seen that you are using TeeChart v7. Note that some things related to null points changed at v8. In v8 there is a TreatNulls property to allow you to DontPaint, Skip or Ignore the null points of the series. But also the default treatment for the nulls (DontPaint) has changed. From v8, TeeChart considers that a null point in a line series (or a fast line series) influences both left and right line segments as a line can only be drawn between two visible points.

So in v8 your application doesn't show neither the segment 42-43 or 43-44. And if you would like to show the segment 42-43 and not the 43-44 you should add another visible point at X=43 and set the point with index 44 as null instead of 43.

In v7 you should set as null the point at index 44 and change your condition from mousemove to:

Code: Select all

if gr_priemer.Series(0).IsNull(p) then
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

adenin
Newbie
Newbie
Posts: 33
Joined: Mon Jun 11, 2007 12:00 am

Re: using SetNull and Yvalues.Value

Post by adenin » Mon Oct 26, 2009 1:44 pm

it works according to your recommendation, but there left one vert line, which shouldn't be there
...as visible from attached printscreen
is it possible to remove it somehow?
thanks
Attachments
vert_line.zip
(46.77 KiB) Downloaded 675 times

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

Re: using SetNull and Yvalues.Value

Post by Yeray » Mon Oct 26, 2009 2:41 pm

Hi adenin,

In v7 setting a value as null, in stairs mode, it won't draw the stair that ends in that point, understanding a stair as an horizontal line plus a vertical line. So, if you want to hide two vertical lines and an horizontal line that means that we have to do some trick.
We've hidden a stair setting the 44 as null but it remains a vertical line. What we can do is to make the point 43 to have the same Y value than the 42 and add a new point at X=43 so we can hide its stair.
the following values work fine here. If you don't understand the trick, try playing around the values and pay attention at how the chart changes:

Code: Select all

.Series(0).AddXY 43, .Series(0).YValues.Value(43),"" , RGB(200,0,0)
.Series(0).YValues.Value(43) = .Series(0).YValues.Value(42)
.Series(0).SetNull 44
.Series(0).SetNull 45
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

adenin
Newbie
Newbie
Posts: 33
Joined: Mon Jun 11, 2007 12:00 am

Re: using SetNull and Yvalues.Value

Post by adenin » Thu Oct 29, 2009 6:15 am

Alonso, thanks, it behaves exactly as I wanted with your source code.

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

Re: using SetNull and Yvalues.Value

Post by Yeray » Fri Oct 30, 2009 4:21 pm

Hi adenin,

I'm glad to hear that! :D
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

Post Reply