Page 1 of 2
X Coordinate from Bar
Posted: Thu Oct 04, 2007 8:11 am
by 4210526
Hi there,
attached there is a screenshot. This picture shows my aim.
This Chart shows production lines with its allocation per year (bars) and the efficiency (line) for each year in percent. The other horizontal lines shows the allocation with an other time calculation.
So each bar is one year that is grouped to one line (the range of years is dynamic, so there are user defined quantity of years). And the line thats shows the efficiency shows this for each year too.
My problem is, that i am not able to center one point of the efficiency line to one bar.
How can i get the X value of the bar?
This will not work because it shows the X value of the grouped bars not for one bar:
Hope its clear! Looking forward to your reply.
Thanks
Posted: Thu Oct 04, 2007 8:29 am
by narcis
Hi AchatSolutions,
You could try doing something like this:
Code: Select all
PosValue:=Series1.CalcXPos(0);
XValue:=Chart1.Axes.Bottom.CalcPosPoint(PosValue);
Where
PosValue is an Integer and
XValue a Double.
Hope this helps!
Posted: Thu Oct 04, 2007 11:35 am
by 4210526
Thanks for your answer!
I am using the prof Version in a other application. Here im using the TeeChart Standard Edition 4.04 for Delphi 6.
Is there a possibility to realize your code?
Posted: Thu Oct 04, 2007 11:58 am
by narcis
Hi AchatSolutions,
I don't have a v4.04 available at the moment but I guess equivalent or same methods should exist. You could try something like this:
Code: Select all
PosValue:=Series1.CalcXPos(0);
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
Posted: Thu Oct 04, 2007 2:34 pm
by 4210526
Thanks for your fast reply.
This solutions does not work.. i am sorry. Are there any alternative?
I can build up a little demo to specific my problem?!
Posted: Thu Oct 04, 2007 2:44 pm
by narcis
Hi AchatSolutions,
Yes please, would be helpful if you sent us a simple example project we can run "as-is" to reproduce the problem here. You can either post your files at news://
www.steema.net/steema.public.attachments newsgroup or at our
upload page.
Thanks in advance!
Posted: Fri Oct 05, 2007 6:18 am
by 4210526
I am using your Upload Page.
Heres the report:
Received TeeChartSample.zip Content Type application/zip Length 293258
Thanks for helping me!
Stefan Henkenjohann
Posted: Fri Oct 05, 2007 10:07 am
by narcis
Hi Stefan,
Thanks for the example project.
Why don't you use the last series for the efficiency line and try populating it doing something like the code below instead of the code you use now?
Code: Select all
Chart1.Draw;
for i:=0 to Chart1.SeriesCount-2 do
begin
PosValue:=Chart1[i].CalcXPos(0);
XValue:=Chart1.Axes.Bottom.CalcPosPoint(PosValue);
Series5.AddXY(XValue, 180 + (i*20));
end;
Posted: Fri Oct 05, 2007 11:00 am
by 4210526
Can you please add this code to my demo project?
I am trying to keep that code running but there are different exceptions.. (Chart1.Draw needs more parameters, undeclard identifier Axes, etc.)
Thank you for your patience
Posted: Mon Oct 08, 2007 8:04 am
by yeray
Hi Stefan,
I'm sorry but the function CalcPosPoint is not available at TeeChart 4 Standard. So, the easiest solution should be using your pro version.
Posted: Tue Nov 06, 2007 8:08 am
by 4210526
Hello support team,
now i am using teechartpro v5.02.
I am trying to use this code:
Code: Select all
PosValue:=Series1.CalcXPos(0);
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
But nothing happens. The efficiency line is always in the middle of the grouped bars.
So i am trying this code:
Code: Select all
PosValue:=Series1.CalcXPos(0);
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
But in my version "BottomAxis" is not available.
Please can you send my a sample code or a sample project to show me how this works correctly?
Thanks!
Posted: Wed Nov 07, 2007 9:28 am
by yeray
Hi Stefan,
Could you please, try commenting the population part of code for your efficiency line (Series5) and add this code at the end of your FormCreate?
This works here in a clean Delphi 5 (with TeeChart Std 4.02).
Code: Select all
Chart1.Draw(Canvas,Chart1.ChartRect);
for i:=0 to Chart1.SeriesCount-2 do
begin
PosValue:=Chart1[i].CalcXPos(0);
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
Series5.AddXY(XValue, 180 + (i*20));
end;
Posted: Wed Nov 07, 2007 3:04 pm
by 4210526
Thanks.
Here is my code. The first for loop should create the efficiency points centered on every bar of line 18. But nothing happens. For line 19 and 20 it works.
Code: Select all
var
i: integer;
PosValue: integer;
XValue: double;
begin
XValue := 0;
//****************************************************************************
// 2010
Series1.AddXY(1, 10000, 'Line 18');
// 2011
Series2.AddXY(1, 12500, 'Line 18');
// 2012
Series3.AddXY(1, 14000, 'Line 18');
// 2013
Series4.AddXY(1, 13500, 'Line 18');
//2014
Series6.AddXY(1, 11500, 'Line 18');
Chart1.Draw(Canvas,Chart1.ChartRect);
for i:=0 to Chart1.SeriesCount-2 do begin
PosValue:=Chart1[i].CalcXPos(0);
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
Series5.AddXY(XValue, 180 + (i*15));
end;
Series5.AddNullXY(XValue, 0);
//****************************************************************************
// 2010
Series1.AddXY(2, 10000, 'Line 19');
// 2011
Series2.AddXY(2, 12500, 'Line 19');
// 2012
Series3.AddXY(2, 14000, 'Line 19');
// 2013
Series4.AddXY(2, 13500, 'Line 19');
//2014
Series6.AddXY(2, 11500, 'Line 19');
Chart1.Draw(Canvas,Chart1.ChartRect);
for i:=0 to Chart1.SeriesCount-2 do begin
PosValue:=Chart1[i].CalcXPos(1);
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
Series5.AddXY(XValue, 180 + (i*15));
end;
Series5.AddNullXY(XValue, 0);
//****************************************************************************
// 2010
Series1.AddXY(3, 10000, 'Line 20');
// 2011
Series2.AddXY(3, 12500, 'Line 20');
// 2012
Series3.AddXY(3, 14000, 'Line 20');
// 2013
Series4.AddXY(3, 13500, 'Line 20');
//2014
Series6.AddXY(3, 11500, 'Line 20');
Chart1.Draw(Canvas,Chart1.ChartRect);
for i:=0 to Chart1.SeriesCount-2 do begin
PosValue:=Chart1[i].CalcXPos(2);
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
Series5.AddXY(XValue, 180 + (i*10));
end;
end;
So it works partial but is there any other solution right there, because the efficiency points are not centered correctly as you can see in this screenshot (to reproduce this, use the code above, and resize the form)?
Big Version:
Click here
I am looking forward to your reply. Thanks!
Posted: Thu Nov 08, 2007 12:03 pm
by yeray
Hi AchatSolutions,
I've been modifying your project and testing how to achieve your request and I haven't fount a better solution than this one:
Code: Select all
procedure TForm1.FormCreate(Sender: TObject);
const numpoints=3;
var
i,j : integer;
PosValue: integer;
XValue: double;
begin
for i:=1 to numpoints do
begin
// 2010
Series1.AddXY(i, 10000, 'Line ' + inttostr(18+i));
// 2011
Series2.AddXY(i, 12500, 'Line ' + inttostr(18+i));
// 2012
Series3.AddXY(i, 14000, 'Line ' + inttostr(18+i));
// 2013
Series4.AddXY(i, 13500, 'Line ' + inttostr(18+i));
//2014
Series5.AddXY(i, 11500, 'Line ' + inttostr(18+i));
end;
Chart1.Draw(Canvas,Chart1.ChartRect);
for j:=0 to numpoints-1 do
begin
for i:=0 to Chart1.SeriesCount-2 do begin
PosValue:=Chart1[i].CalcXPos(j);
// PosValue:=Chart1[i].Marks.Positions.Position[0].ArrowTo.x;
XValue:=Chart1.BottomAxis.CalcPosPoint(PosValue);
Series6.AddXY(XValue, 180 + (i*10));
end;
Series6.AddNullXY(XValue, PosValue,'');
end;
end;
The comented line "PosValue:=Chart1
.Marks.Positions.Position[0].ArrowTo.x;" is a better solution, neither perfect, that works for teechart 8. You could download an eval version to test it.
Posted: Mon Nov 19, 2007 9:51 am
by 4210526
Thanks for the code.
I have uploaded your code in a sample project by using version 5.02 with filename 'AchatSolutions_LineNotCentered_Sample.zip'.
Here you can see a screenshot of the compiled application that is attached:
Big version:
Click here
The Lines are not x centered in the middle of the bar.
When i uncomment the line
Code: Select all
PosValue:=Chart1[i].Marks.Positions.Position[0].ArrowTo.x;
delphi throws a access violation.
Sorry but either i dont understand your code or this will not work in my sample application.
Maybe you can upload a demo project that demonstrates how to fix this problem correctly (i am using delphi6 and teechart pro v5.02)?!
Thanks!