帮我解决立即给你我的全部分数

知足常乐 2001-11-06 09:32:11
我在CHART控件上动态画了几条曲线,当我用鼠标点击CHART控件时要在一个LABEL控件上显示横坐标及对应此横坐标的几条曲线的纵坐标值,应该怎样做?用GetCursorValues()很容易得到横坐标(X1)的值,但相应的纵坐标值(即曲线上以得到的 X1 为横坐标的点(X1,Y1)的纵坐标值 Y1 )不知怎样得到?请各位高手指点,不甚感谢!
...全文
148 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
知足常乐 2001-11-22
  • 打赏
  • 举报
回复
没办法,心情好,只要曾经 UP 就给分!!!!!!!!!!!!!!
知足常乐 2001-11-09
  • 打赏
  • 举报
回复
UPUP!
知足常乐 2001-11-07
  • 打赏
  • 举报
回复
难道各位高手没有看见吗?拜托,帮帮忙!!!
我再补充一下:解决下面这个问题也一样
能否将得到的 X 值转化为(或者通过什么方法求出)它在CHARTSERIES中的 INDEX ?
知足常乐 2001-11-06
  • 打赏
  • 举报
回复
我先试一下,若行的话立即给分
lxl 2001-11-06
  • 打赏
  • 举报
回复
procedure TForm1.Chart1Click(Sender: TObject);
var t : tpoint;
begin
t:=chart1.GetCursorPos;
showmessage(inttostr(chart1.Series[0].CalcYPosValue(t.x)));
end;
lovewangj 2001-11-06
  • 打赏
  • 举报
回复
将x值带入曲线函数不就行了。
bubble 2001-11-06
  • 打赏
  • 举报
回复
@_@
知足常乐 2001-11-06
  • 打赏
  • 举报
回复
lovewangj(lllll)
能否讲得详细点,我是个初学者
知足常乐 2001-11-06
  • 打赏
  • 举报
回复
好象不行,再帮我想想办法!!!
我再讲以下我的目的和思路:
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;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧