Page 1 of 1
how to get the result as examples 'opaque zones'
Posted: Fri Dec 08, 2006 7:30 am
by 9348298
Hello.
I want get the result as the result as examples 'opaque zones' ,I build a new form and put on a Tchart component ,a Tcheck component and a TScrollBar component , then copy the source code to my new project. But When I Compile Error notice :"Field TAxisOpaqueZone.ChartTool1 does not a correspondind component . Remove the Declaration?" How can i do?
my environment is BD7 and Teechart 7.06
Posted: Fri Dec 08, 2006 1:08 pm
by Pep
Hi,
using the same code as in the example should work fine, most likely the error is related with the ColorLine Tools which you must add, at runtime or at design time.
Posted: Sat Dec 09, 2006 2:40 am
by 9348298
Hi Jorge
I want add the TColorLineTool component on the form ,but do not find it on the toolbar or through :View-->Component List-->Search by name;
why ?What I missed?
Posted: Mon Dec 11, 2006 7:24 am
by Marjan
Hi.
To add a chart tool to specific chart, do the following:
1. Add a TChart on the form.
2. Select tChart with left mouse button.
3) Press right mouse button to bring up chart editor.
4) Select the "Tools" tab.
5) Press the "+" sign button
6) Select "Axis" tab
7) Double click the "color line" tool icon.
Posted: Mon Dec 11, 2006 8:31 am
by 9348298
Hi Marjan
Thank you for your help!
I have another problem :
How to Build a Legend runtime and can move the legend to anywhere on the chart according to custom needs. I want to build more than one legend on the same chart run time, becuse I have four group series on the chart.
Best Regards
hexfhhu
Posted: Tue Dec 12, 2006 2:50 pm
by Pep
Hi,
you could make use of the ExtraLegend Tool which allows you to display one Legend for each Series, and then use similar code to the following which allow to move them with the mouse :
Code: Select all
procedure TForm1.Chart1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button = mbLeft Then
begin
If iDragged = -1 Then
begin
Chart1.Cursor := 2020;
iDragged := Chart1.Legend.Clicked(X, Y);
If iDragged <> -1 Then
begin
With Chart1.Legend do
begin
xDisp := X - ShapeBounds.Left;
yDisp := Y - ShapeBounds.Top
End;
End
else begin
i2Dragged := charttool1.Legend.Clicked(X, Y);
If i2Dragged <> -1 Then
begin
With Charttool1.Legend do
begin
xDisp := X - Charttool1.legend.ShapeBounds.Left;
yDisp := Y - Charttool1.legend.ShapeBounds.Top
End;
End
else begin
i2Dragged:=-1;
Chart1.Cursor := 0;
end;
end;
end
Else
begin
iDragged := -1;
Chart1.Cursor := 0
End;
End;
end;
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If iDragged <> -1 Then
begin
With Chart1.Legend do
begin
Left := X - xDisp;
Top := Y - yDisp
End;
End;
if i2Dragged <> -1 then
begin
with ChartTool1.Legend do
begin
Left:=X-xDisp;
Top:=Y-yDisp
end;
end;
end;
procedure TForm1.Chart1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
iDragged := -1;
i2Dragged := -1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
iDragged := -1;
i2Dragged := -1;
Chart1.Zoom.Allow:=false;
end;
Posted: Wed Dec 13, 2006 1:10 pm
by 9348298
Hi Jorge
thank you for your help!
I can move the legend with your code .
But I have not mastered how to arrange 40 series to four different legend. can you give me a example?
Posted: Wed Dec 13, 2006 2:19 pm
by narcis
Hi hexfhhu,
To achieve that you'll need to add one extra legend tool for each series in the chart, for example:
Code: Select all
uses Series, TeeExtraLegendTool;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
tmpTool: TExtraLegendTool;
begin
for i:=0 to 40 do
begin
Chart1.AddSeries(TLineSeries.Create(self));
tmpTool:=TExtraLegendTool.Create(self);
Chart1.Tools.Add(tmpTool);
tmpTool.Series:=Chart1[i];
Chart1[i].FillSampleValues();
end;
end;
After that you'll have to make some changes in the OnMouseDown event Pep posted. You'll have to change this:
Code: Select all
i2Dragged := charttool1.Legend.Clicked(X, Y);
If i2Dragged <> -1 Then
begin
With Charttool1.Legend do
begin
xDisp := X - Charttool1.legend.ShapeBounds.Left;
yDisp := Y - Charttool1.legend.ShapeBounds.Top
End;
End
else begin
i2Dragged:=-1;
Chart1.Cursor := 0;
end;
For something like this:
Code: Select all
for i:=0 to Chart1.Tools.Count do
begin
if (Chart1.Tools.Items[i] is TExtraLegendTool) then
begin
tmpTool := (Chart1.Tools.Items[i] as TExtraLegendTool);
i2Dragged := tmpTool.Legend.Clicked(X, Y);
end;
if (i2Dragged <> -1 ) then
begin
With tmpTool.Legend do
begin
xDisp := X - tmpTool.legend.ShapeBounds.Left;
yDisp := Y - tmpTool.legend.ShapeBounds.Top
end;
break;
end
else begin
i2Dragged:=-1;
Chart1.Cursor := 0;
end;
end;
And also some similar changes in the OnMouseMove event when ChartTool1 is used you should replace it by tmpTool.
Posted: Wed Dec 13, 2006 3:04 pm
by 9348298
Hi Narcís
I will try it tomorry , thank you !
Best Regard
hexfhhu
Posted: Fri Dec 15, 2006 7:03 am
by 9348298
Hi Narcís
I get the legend for every series , but the legend style is set to the series value automatically. I want to change the legend style to seriesname for erery legend, how can I do it?
By the way, I wonder whether the legend can show one or several series names that i want it to show, not just show all the series names. If it can do that, could give me a samlpe program? thank you very much.
just
Best Regard
hexfhhu
Posted: Fri Dec 15, 2006 9:35 am
by narcis
Hi hexfhhu,
I get the legend for every series , but the legend style is set to the series value automatically. I want to change the legend style to seriesname for erery legend, how can I do it?
You can do something like this:
Code: Select all
for i:=0 to Chart1.Tools.Count do
if (Chart1.Tools.Items[i] is TExtraLegendTool) then
(Chart1.Tools.Items[i] as TExtraLegendTool).Legend.LegendStyle:=lsSeries;
By the way, I wonder whether the legend can show one or several series names that i want it to show, not just show all the series names. If it can do that, could give me a samlpe program? thank you very much.
You may want to do something as in the
All Features\Welcome!\Miscellaneous\Legend\Drawing more text example in the features demo. You'll find the demo at TeeChart's program group.
Posted: Mon Dec 18, 2006 8:32 am
by 9348298
Hi Narcís
Thank you for your help.The demo' All Features\Welcome!\Miscellaneous\Legend\Drawing more text example' is not
what I want. I have sended my example to your email.
_________________
Best Regards
hexfhhu
Posted: Mon Dec 18, 2006 9:19 am
by narcis
Hi hexfhhu,
Thanks for the image. According to it I think that would be most suitable for your needs is using ChartListBox component as shown in the All Features\Welcome!\Components\Chart ListBox examples at the features demo.
Posted: Mon Dec 18, 2006 1:58 pm
by 9348298
Hi Narcís
When i use chartlistbox and set chart property is my chart name, the problem is still .My example picture is one chart ,not three chart.
why?
_________________
Best Regards
hexfhhu
Posted: Sat Dec 23, 2006 3:04 pm
by Pep
Hi hexfhhu,
I've not seen the image you sent to my colleague Narcis (as he is at this moment on holidays), but seeing at your post as he said using ChartListBox should be the best way. You can use some ChartListBox component, assign to all the same Chart and then customize which Series (items) must be displayed. To remove items you can use :
ChartListBox1.Items.Delete(1); // Delete Series index 1
If this still not help please send me the image directly to my mail (
pep@steema.com).