Page 1 of 1

using SetNull and Yvalues.Value

Posted: Fri Oct 23, 2009 7:23 am
by 9535493
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

Re: using SetNull and Yvalues.Value

Posted: Fri Oct 23, 2009 11:37 am
by yeray
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

Re: using SetNull and Yvalues.Value

Posted: Mon Oct 26, 2009 10:32 am
by 9535493
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)

Re: using SetNull and Yvalues.Value

Posted: Mon Oct 26, 2009 11:28 am
by yeray
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.

Re: using SetNull and Yvalues.Value

Posted: Mon Oct 26, 2009 11:53 am
by 9535493
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

Re: using SetNull and Yvalues.Value

Posted: Mon Oct 26, 2009 1:06 pm
by yeray
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

Re: using SetNull and Yvalues.Value

Posted: Mon Oct 26, 2009 1:44 pm
by 9535493
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

Re: using SetNull and Yvalues.Value

Posted: Mon Oct 26, 2009 2:41 pm
by yeray
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

Re: using SetNull and Yvalues.Value

Posted: Thu Oct 29, 2009 6:15 am
by 9535493
Alonso, thanks, it behaves exactly as I wanted with your source code.

Re: using SetNull and Yvalues.Value

Posted: Fri Oct 30, 2009 4:21 pm
by yeray
Hi adenin,

I'm glad to hear that! :D