Page 1 of 1

2 sets of axisarrowtools for the same axis

Posted: Wed Jul 16, 2008 7:13 pm
by 9336349
Hi

is it possible to have 2 sets of axis arrow tools for the same axis?

I was thinking of using a pair of small arrows to scroll by a small percentage and a pair of large arrows to scroll by a much larger percentage. I was going to put the small arrow on top of the large arrow. If I click on the small arrow, will just the small arrow receive the click?

If I click on the portion of the large arrow, not covered by the small arrow, will just the large arrow receive the click.

I have been unable to test this as although my arrows show up at design time, they disappear at runtime for some reason.

Is this because my axis is a datetime axis?

Can I use a datetime axis with axisarrow tools?

Also is it possible to show the arrows in a disabled state or to hide them if scrolling is disallowed?

Thanks

Colin

Posted: Thu Jul 17, 2008 8:38 am
by yeray
Hi Colin,

Here I found a little problem. If you want two arrows superposed, you may want to give preference to the little one. To do this, the little arrow must be above the big one at the tools list. But then, you'll have the big arrow painted above the little one. So you'll be able to click the little arrow but you won't see it.

So probably, it would be easier to do it with simple buttons.
Gertrude wrote:I have been unable to test this as although my arrows show up at design time, they disappear at runtime for some reason.

Is this because my axis is a datetime axis?

Can I use a datetime axis with axisarrow tools?
It's strange, I can see the arrows assigned to a datetime axis. Are you using the latest teechart available at client area?
Gertrude wrote:Also is it possible to show the arrows in a disabled state or to hide them if scrolling is disallowed?
You can use this to deactivate the arrows. And they will disappear automatically:

Code: Select all

ChartTool1.Active := false;

Posted: Sat Jul 19, 2008 3:16 pm
by 9336349
Many thanks for your reply.

Sorry, but I do not understand what you mean about using little buttons. How do I put little buttons on the chart axis?

My axisarrows disappear at runtime and my annotation tool fails to respond to a click event at run time although it does show up at runtime. I have not been able to discover why yet.


Regards

Colin

Posted: Mon Jul 21, 2008 8:14 am
by yeray
Hi Colin,
Gertrude wrote:Sorry, but I do not understand what you mean about using little buttons. How do I put little buttons on the chart axis?
I mean a Standard TButton. Not any TChart tool. For example, the button which would do something similar as the left arrow could be:

Code: Select all

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Chart1.Axes.Bottom do
  begin
    Automatic := false;
    Minimum := Chart1.Axes.Bottom.Minimum + 1;
    Maximum := Chart1.Axes.Bottom.Maximum + 1;
  end;
end;
Gertrude wrote:My axisarrows disappear at runtime and my annotation tool fails to respond to a click event at run time although it does show up at runtime. I have not been able to discover why yet.
I'm still not able to reproduce any of these issues here. Could you please verify if you are using the latest TeeChart version available? Or could you tell us if you are doing any specific step that we probably miss trying to reproduce them?

Posted: Tue Jul 22, 2008 5:40 pm
by 9336349
Hi

Thanks for your reply.

I was afraid that you meant standard buttons.

I really want to use the Chartarrowtools as to me they are aesthetically the least worst way available for the user to scroll the axis.

I have not had time to investigate why the arrows do not show up at runtime. I will try and look at it tomorrow.

Thanks

Colin

Posted: Tue Jul 22, 2008 7:25 pm
by 9336349
HI

I've now found out why the ChartTools were not showing at runtime. It is because I had unknowingly disabled the chart.

Now, I've enabled the chart, they appear. The only problem, I now have with the 2 sets of arrows, is that only one of them gets the click event, no matter how hard I try to click on just the small arrow or just the big arrow.

Unfortunately, the charttools only have a single click event.

If they had a double click event, I could then use just one arrow and if a single click was made I could scroll a small amount and if a double click was made then I could scroll a larger amount.

perhaps you would be kind enough to suggest something like this for the next version, or some way to distinguish the 2 arrows.

Now I have to go back to the drawing board and try to figure out some user-friendly way to allow the user to scroll a date-time axis within prescribed limits.

Thanks for your help

Colin

Posted: Wed Jul 23, 2008 8:40 am
by yeray
Hi Colin,

I've added you request to the wish list to be considered those enhancements in future releases (TV52013268).

Meanwhile, consider using buttons as I told you before. Or even you could use an Arrow series with only two arrows. This option would be harder to implement as you will need to recalculate the values for the series points every time the chart is scrolled, moved, zoomed... or at OnAfterDraw event.

Posted: Wed Jul 23, 2008 5:58 pm
by 9336349
Hi

OK

The problem with all the methods except using a scrollbar is that the user needs to be told somehow how to scroll the chart.

A user is used to the idea of a scrollbar scrolling the screen. But a scrollbar on a TeeChart covers the whole of the side, and so you would expect the panel to scroll not just the chart.

Also scrollbars do not work with datetime axes. (Also I am using a scrollbar to control the amount of a zoom for the chart. Actually instead of a scrollbar for the zoom, I would have liked to have used a 'slider' type of control with an image like a volume control, i.e. an elongated triangle shape, with the difference that the slider can be moved continuously like a scrollbar rather than in discrete steps as is usual for a slider. If you think that is a good idea, feel free to recommend that as well)

Anyway, many thanks for putting forwards my suggestions.

Thanks again

Colin

Posted: Thu Jul 24, 2008 8:20 am
by yeray
Hi Colin,

1. Scrollbars should work with DateTime axis. Have you received this example from Narcis?

2. So, you are planning to add a slider to do something similar as the Zoom slider does in the Design Time editor?

Posted: Wed Jul 30, 2008 9:30 am
by 9336349
Hi

I cannot find the zoom slider in the design time editor.

Do you mean the Chart Editor?

I looked on its zoom and scroll page and saw no zoom slider.

Is there any chance that the zoom slider could become a separate TeeChart component that we could use at run-time?

Thanks

Colin

Posted: Wed Jul 30, 2008 10:18 am
by yeray
Hi Colin,

I think I don't understand your request.
I mean the Zoom slider, or trackbar, at ChartEditor -> Chart -> 3D.
To do the same as this trackbar does, you could simply do:

Code: Select all

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.Min := 0;
  TrackBar1.Max := 500;

  TrackBar1.Position := Chart1.Aspect.Zoom;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Chart1.Aspect.Zoom := TrackBar1.Position;
end;

Posted: Wed Jul 30, 2008 5:51 pm
by 9336349
Hi

I meant, I would like to be able to use it outside of the editor - to be able to put it on a form but link it to a chart.

The problem with a trackbar is it consists of a series of discrete steps, whereas a scroll bar is essentially continuous.

I had not thought of looking tin the 3-d section as my charts are 2-D.

However I'll have a look now I know where it is.


Thanks

Colin

Posted: Thu Jul 31, 2008 8:28 am
by yeray
Hi Colin,

The code I posted yesterday was for using a trackbar outside of the editor.

Here you have a code I suggest you using a scrollbar with a 2D chart.

Code: Select all

procedure TForm1.ScrollBar1Change(Sender: TObject);
var XIncrement, YIncrement: Double;
begin
  with Series1 do
  begin
    XIncrement := ((MaxXValue - MinXValue) * ScrollBar1.Position / ScrollBar1.Max) / 2;
    YIncrement := ((MaxYValue - MinYValue) * ScrollBar1.Position / ScrollBar1.Max) / 2;

    Chart1.Axes.Bottom.SetMinMax(MinXValue + Xincrement, MaxXValue - Xincrement);
    Chart1.Axes.Left.SetMinMax(MinYValue + Yincrement, MaxYValue - Yincrement);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ScrollBar1.Min := 0;
  ScrollBar1.Max := 100;
  ScrollBar1.Position := 0;
end;

Posted: Thu Jul 31, 2008 5:37 pm
by 9336349
Hi

Thanks.

I think I have worked out the code Ok now.

Thanks again

Colin