chart问题 ( 积分: 100 )

  • 主题发起人 主题发起人 sunshareforever
  • 开始时间 开始时间
S

sunshareforever

Unregistered / Unconfirmed
GUEST, unregistred user!
当鼠标单击CHART图表时,怎么得到鼠标对应图表的X、Y轴的值。
Y轴是DATETIME。能实现吗?谢谢大家
 
当鼠标单击CHART图表时,怎么得到鼠标对应图表的X、Y轴的值。
Y轴是DATETIME。能实现吗?谢谢大家
 
procedure TForm1.Chart1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
//鼠标事件
begin
if(button=mbright) then
//or mbleft
begin
lastmousexx:=x;
lastmouseyy:=y;// 点的坐标,再根据你的轴的对应关系线性变换,反算过来

end;
end;
 
说详细点呀,大哥!代码写完呀
 
TChart使用经验小结 选择自 wintergoes 的 Blog
关键字 TChart使用经验小结
出处

1、问题:通过Addxy方法给TChart添加标记(Mark)时,发现在TChart的横坐标会随着Mark而变化,后来发现通过以下方法可避免这种情况:双击TChart,点击Axis-> top or bottom ->labels,在styles中将labels的形式改为Value即可!
2、几个有用的属性:
图表上的每个点都是有索引的,就象一个数组一样,在OnClickSeries事件中有个ValueIndex属性,该属性可以得到鼠标所点击的点的索引值(必须将Series的Point设置为可见,鼠标点击到那个点时才可以触发该事件)。
xValue[index]、yValue[index]分别表示图表的索引为index的横纵坐标值,用这两个属性可以读取和设置索引为index的点的值,注意:不要用xValues和yValues,这两个属性也可以达到同样的目的,但是速度非常的慢。因为后两个在进行操作的时候可能要遍历整个图表上的值(个人观点)
在MouseDown,MouseMove,Mouseup中,可以利用xScreentoValue(x),yScreentoValue(y)得到鼠标当时所在点对应在图表上的横纵坐标值。
e.g.
.......
private
Nowindex:Integer;
Cantuo:boolean;
........
procedure TfrmMain.Chart1ClickSeries(Sender: TCustomChart;
Series: TChartSeries;
ValueIndex: Integer;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
NowIndex:=ValueIndex;
end;

procedure TfrmMain.Chart1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
Cantuo:=true;
end;

procedure TfrmMain.Chart1MouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
Cantuo:=false;
end;

procedure TfrmMain.Chart1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
begin
if Cantuo then
begin
Series1.yValue[NowIndex]:= Series1.yScreenToValue(y) ;
end;
end;

这里即实现了可以在图表中拖动某一个点使其在纵轴上变化位置

作者Blog:http://blog.csdn.net/wintergoes/

看看这个吧
 
procedure TForm1.Chart1Click(Sender: TObject);
var tmpx,tmpy:double;
begin
chart1.series[0].GetCursorValues(tmpx,tmpy);//此处自动将鼠标屏幕坐标值转化为chart坐标值
edit2.Text:=chart1.Series[0].GetVertAxis.LabelValue(tmpy);//将得到的纵坐标值转化为相应的坐标轴格式,如 日期型等
edit1.Text:=chart1.Series[0].getHorizAxis.LabelValue(tmpx);
end;

delphi6.W2003调试通过
 
哈哈,看来我的方法最简单,
to app2001你的方法也太麻烦了!
 
后退
顶部