|
Chart Tools의 Annotation tool을 응용하시면 될것같네요.
혹 최근 Example이 있으시면 Tools - Annotation - Annotation Callout 을 한번 보시기 바랍니다.
그리고 샘플코드 일부 추가합니다.
//---------------------------------------------------------------------------
void __fastcall TAnnotationCO::SetCallout(int AIndex)
{
// Change annotation text
ChartTool1->Text = "Point: "+IntToStr(AIndex)+TeeLineSeparator+
"Value: "+Series1->ValueMarkText[AIndex];
// Re-position annotation callout
ChartTool1->Callout->Visible = true;
ChartTool1->Callout->XPosition = Series1->CalcXPos(AIndex);
ChartTool1->Callout->YPosition = Series1->CalcYPos(AIndex);
ChartTool1->Callout->ZPosition = 0;
}
//---------------------------------------------------------------------------
// Returns Series point index that is nearest to xy position.
int __fastcall TAnnotationCO::NearestPoint(TChartSeries *ASeries, int x, int y)
{
int res = -1;
int Difference = -1;
int tmpDif;
for (int t=0; t<ASeries->Count(); t++)
{
tmpDif = int(TeeDistance(ASeries->CalcXPos(t)-x,ASeries->CalcYPos(t)-y));
if (Difference==-1 || tmpDif<Difference)
{
Difference = tmpDif;
res = t;
}
}
return res;
}
//---------------------------------------------------------------------------
void __fastcall TAnnotationCO::Chart1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (CheckBox1->Checked) // follow mouse
{
// Locate nearest point to mouse...
int tmp = NearestPoint(Series1, X, Y);
if (tmp!=-1) SetCallout(tmp); // set annotation callout
}
}
//---------------------------------------------------------------------------
unitas 님이 쓰신 글 :
: data를 300 개 받아서 그래프로 최대/최소(y좌표값)값에 표시를 해야 하는데
: (Line Series와 Point Series 2개로 표시)
: Series1->MinXValue() 과 Series1->MaxXValue()를 이용하면 y좌표의 최대,최소값이
: 나오는데 그때 해당하는 x좌표값을 얻을수 있는 함수나 방법이 있나요?
: [수신값을 일일이 비교하는 방법 말구요.]
:
: 그리고 한가지만 더 할께요.
: [포럼의 TChart에 관한 검색을 해봤는데 이 내용이 없더라구요. - 몇일째 해결이 안되서요.]
: mark 표시에 관한건데요.
:
: Line 그래프로가 이미 표시가 되어 있을때 아무대나 마우스로 찍으면 그에 해당하는 x,y 값이 나오잖아요.
: 그때 x 좌표값은 그대로 가지고 y 좌표는 마우스로 클릭한 위치에서 Line 그래프와 만나는 곳에
: 표시를 하고 싶거든요.
: [질문이 좀 애매한것 같아서 그림 첨부합니다.]
:
: 검색을 해보니 Series[0]->XScreenToValue(X) 와 Series[0]->YScreenToValue(Y)를 이용하라고
: 나와 있는데 이 함수는 단지 마우스로 클릭한 바로 그 위치만 알수 있잖아요.
:
: 아시는분 부탁드립니다.
|