Page 1 of 1

Marks position with SubChartTool

Posted: Wed Jan 24, 2018 4:33 pm
by 16481925
Hello,

I am currently working with subChartTool and have some visual problems when i manually move marks in a sub chart.
1)At first everything is place where i want but as soon as a draw occur, the marks are draw like if the TChart is at the TopLeft of the parent TChart, as you can see in the attachment.
The marks still react whith the mouseOver in the expected position and not where they are draw.(in the attachment 4th Mark text color is reacting to the cursor).
2)The same problem happen with tips too.
3)When i set Tchart->Title->AdjustFrame = true; in a sub chart, the title of all the subchart in the same row are draw on each other.(attachment : titles B1 and B2 in the 2nd chart title position).

Do you have any way to avoid this problem ?

Another question : Is their a way to detect if a TChart is a subchart without accessing to the subChartTool?

Re: Marks position with SubChartTool

Posted: Fri Jan 26, 2018 9:03 am
by yeray
Hello,
Eic2 wrote:1)At first everything is place where i want but as soon as a draw occur, the marks are draw like if the TChart is at the TopLeft of the parent TChart, as you can see in the attachment.
The marks still react whith the mouseOver in the expected position and not where they are draw.(in the attachment 4th Mark text color is reacting to the cursor).
I can't reproduce this problem. I can drag the marks and they are redrawn at the correct positions for me.
Eic2 wrote:2)The same problem happen with tips too.
I see a different problem. Mark tips don't seem to appear in a subchart for me here.
Eic2 wrote:3)When i set Tchart->Title->AdjustFrame = true; in a sub chart, the title of all the subchart in the same row are draw on each other.(attachment : titles B1 and B2 in the 2nd chart title position).
I can reproduce this one. It seems the vertical position is correct, but the horizontal position is wrong.
I've added it to the public tracker:
http://bugs.teechart.net/show_bug.cgi?id=1978

Here the test project. Could you please modify it or arrange a new simple project we can run as-is to reproduce all the problems here?
testSubChart.zip
(84.35 KiB) Downloaded 660 times
Thanks in advance.

Re: Marks position with SubChartTool

Posted: Fri Feb 02, 2018 3:45 pm
by 16481925
Thanks for your reply,

1) Most of the time i display the chart through image, so i place everything with code.
You can find my test project in attachment, I've try to make it as simple as possible. It work with c++Builder.

2) In my project the tips currently don't work with subcharts, It seem that i have made a change that broke it and can't figure what.

3)Do you have any way to solve the problem before it's solve ?

Re: Marks position with SubChartTool

Posted: Mon Feb 05, 2018 12:32 pm
by yeray
Hello,

1) I could reproduce this issue thanks to your application. You are manually positioning the marks positions relative to your subcharts, but they are absolute pixel positions, relative to the main chart.
So you should store the SubCharts positions and use it as Offsets in your MoveMarks function.

2) I've tried removing most part of the code in your project and I can't find what's wrong either. I've even tried in a new simple project and it seems to work fine:

Code: Select all

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   subChartTool = new TSubChartTool(Chart1);
   Chart1->Tools->Add(subChartTool);

   AddSubChart("SubChart1");
   AddSubChart("SubChart2");
   AddSubChart("SubChart3");

   PlaceSubCharts();
   Chart1->Draw();
}
//---------------------------------------------------------------------------
void TForm1::AddSubChart(String ATitle)
{
	TChart * subChart = subChartTool->Charts->AddChart(ATitle);

	subChart->Color=clBtnFace;
	subChart->View3D=False;

	subChart->Title->Caption=ATitle;
	subChart->Title->Show();

	TDonutSeries * series = new TDonutSeries(subChart);
	subChart->AddSeries(series);

	series->FillSampleValues();

	series->Marks->Arrow->Hide();
	series->Marks->Callout->Arrow->Hide();

	TMarksTipTool * marksTip = new TMarksTipTool(subChart);
	subChart->Tools->Add(marksTip);
	marksTip->SystemHints=false;

	Chart1->Draw();
}
//---------------------------------------------------------------------------
void TForm1::PlaceSubCharts()
{
  int i, iOffsetY, iEqualWidth;
  int iDeltaOffsetY = 0;
  double dCoeff1 = 0.5;
  double dCoeff2 = 0.5;

  TSubChartTool * subChartTool = dynamic_cast<TSubChartTool*>(Chart1->Tools->Items[0]);

  TSubChart * subChart1 = subChartTool->Charts->Items[0];
  subChart1->Top = 0;
  subChart1->Height = Chart1->Height * dCoeff1;
  subChart1->Left = 0;
  subChart1->Width = Chart1->Width;

  if (subChartTool->Charts->Count > 1)
  {
	iOffsetY = subChart1->Top + subChart1->Height + iDeltaOffsetY;
	iEqualWidth = (Chart1->Width - 0) / (subChartTool->Charts->Count - 1);
	for (int i=1; i<subChartTool->Charts->Count; i++)
	{
	  subChartTool->Charts->Items[i]->Top = iOffsetY;
	  subChartTool->Charts->Items[i]->Height = Chart1->Height * dCoeff2;
	  if (i > 1)
		subChartTool->Charts->Items[i]->Left = (i - 1) * iEqualWidth + ((i > 1) ? 1 : 0);
	  else
		subChartTool->Charts->Items[i]->Left = 0;

	  subChartTool->Charts->Items[i]->Width = iEqualWidth;
	}
  }
}
3) You could try using a TAnnotationTool instead of a Title.