回 帖 发 新 帖 刷新版面

主题:求助!怎样把在chart上的点转换成其坐标系上的值

目的让chart上series的点通过鼠标拖动发生变化  (series是lines形的)

var
  Form1: TForm1;
  aa:boolean; i:longint;

procedure TForm1.Chart2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
i:=series2.Clicked(x,y);
if i<>-1 then
  aa:=true
end;

procedure TForm1.Chart2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
movept:tpoint;
begin
if aa then
begin
   movept.x :=x;
   movept.Y:=y;
   series2.XValue[i]:=movept.X; //问题是怎样把这个鼠标捕捉到的点值转换成chart中对应的坐标系的值呢? 谢谢
   
   series2.YValue[i]:=movept.Y;
  //series2.checkdatasource;
  series2.Repaint;
  end;
end;

回复列表 (共5个回复)

沙发

chart组件是从panel继承来的 各位帮帮忙 谢谢

板凳

有其他的方法 实现也行  谢谢

3 楼

procedure TForm1.Chart2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
movept:tpoint;
begin
if aa then
 begin
   movept.x :=x;
   movept.Y:=y;
   series2.XValue[i]:=series2.XScreenToValue(movept.X);//改进了 可是会抱越界错误{list index out of bounds(-1)}
   series2.YValue[i]:=series2.YScreenToValue(movept.Y);
  //series2.checkdatasource;
  series2.Repaint;
  end;
end;
忘高手赐教... 线形是由Series2.FillSampleValues(20);初始化的

4 楼

你试试这个属性
Chart1.BottomAxis.CalcPosPoint(x)

5 楼

哦 好的  谢谢 问题已经解决了
我少了个把aa指成false了 呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册