procedure TForm1.Chart1Click(Sender: TObject);
var t : tpoint;
begin
t:=chart1.GetCursorPos;
showmessage(inttostr(chart1.Series[0].CalcYPosValue(t.x)));
end;
好象不行,再帮我想想办法!!!
我再讲以下我的目的和思路:
1、我再CHART控件中动态画了几条曲线:
var Series1:TLineSeries
begin
//for i:=0 to RouteCounts-1 do
for i:=0 to 0 do //假如我只画一条
begin
Series1:=TLineSeries.Create(self);
Series1.ParentChart:=Chart1;
Series1.Title:='车道'+inttostr(i+1);
Series1.SeriesColor := clRed;
Series1.XValues.DateTime := True ;
StoredProc1.First;
while not StoredProc1.eof do
begin
Chart1.Series[i].AddXY(StoredProc1.Fieldbyname('rqsj').value,
StoredProc1.Fields[i+2].value,
'',
Chart1.Series[i].SeriesColor);
StoredProc1.next;
end;
end;
end;
2、我在Chart1MouseMove()事件中编写如下代码,以实现鼠标在CHART1中移动时动态画一条竖线,CHART1的横坐标是时间型的,竖线以半小时为单位随鼠标跳动;同时,竖线与曲线的交点的值动态显示在一个 LABEL 控件上(它是指某一时间的流量值)。
Var
tmpX,tmpY:Double;
P1:TPoint;
begin
if PtInRect( Chart1.ChartRect, Point(X-Chart1.Width3D,Y+Chart1.Height3D) ) then
begin
With Series1 do
begin
GetCursorValues(tmpX,tmpY);
Present:=strtodatetime(GetHorizAxis.LabelValue(tmpX));
end;
PresentDate:=round(Present);
DecodeTime(Present, Hour, Min, Sec, MSec);
if Min<30 then Min:=0;
if Min>=30 then Min:=30;
PresentTime:=EncodeTime(Hour, Min, Sec, MSec);
NewPresent:=strtodatetime(datetostr(PresentDate)+' '+timetostr(PresentTime));
if NewPresent<>OldPresent then
begin
OldPresent:=NewPresent;
if (OldX<>-1) then
begin
DrawCross(OldX,OldY);
OldX:=-1;
end;
DrawCross(x,y);
OldX:=x;
OldY:=y;
Label1.Caption:='时间'+#13+datetimetostr(NewPresent)
+#13+Series1.GetVertAxis.LabelValue(tmpY);
//此时Series1.GetVertAxis.LabelValue(tmpY)为鼠标位置值,而非我要的
end;
end;
end;