如何自定义坐标系,且在一个坐标系中打开一副图片,当鼠标在图片上点击时显示出鼠标在当前坐标系下的x1、y1坐标,并将x1、y1坐标值添加到x1、y1坐标的输入框中;再次在图片上点击时显示出鼠标在当前坐标系下的x2、y2坐标,并将x2、y2坐标值添加到x2、y2坐标的输入框中。
请各位高手指点!
谢谢!

解决方案 »

  1.   

    在图片的 OnMouseDown 事件里处理:
    var
      bFirstClick: Boolean;
    procedure TForm1.图片MouseDown(Sender: TObject; Button: 
                                   TMouseButton; Shift: TShiftState;
                                   X, Y: Integer);
    begin
      if bFirstClick then
      begin
        x1.Text := IntToStr(X);
        y1.Text := IntToStr(Y);
        bFirstClick := False;
      end
      else begin
        x2.Text := IntToStr(X);
        y2.Text := IntToStr(Y);
        bFirstClick := True;
      end;
    end;
      

  2.   

    谢谢zhengji(看雨飞)的关注!
    我试了一下,发现每次点击都只能改变x1、y1坐标的输入框,而x2、y2坐标的输入框没有变化,能否告诉我是为什么?
    此外,请问鼠标在图片上移动时如何动态显示鼠标所指位置的坐标值?
      

  3.   

    注意:bFirstClick: Boolean; 需是全局的,模块级的,或者TForm1类内,但不能是
    procedure TForm1.图片MouseDown 方法的局部变量。
      

  4.   

    读坐标值问题已解决,谢谢 zhengji(看雨飞) 的指点!
    还有两个问题:
    1、在图片上如何随着鼠标移动动态显示鼠标所指位置的坐标值(此时鼠标为十字状态)?
    2、当图片放大或缩小时,坐标值如何转换?即是在图片实际大小时确定图片上一点的坐标后,然后为了更准确地确定另一点的坐标,需要以某一放大系数放大图像,放大后再定出另一点的坐标,但这两点是在图片大小不同的情况下定出来的,如何将不同情况下的坐标值转换为同一情况下的相对坐标?
      

  5.   

    问题1. 在图片组件的 OnMouseMove 事件写上述的取坐标代码;问题2. 数学问题,楼主自己考虑一下即可,不难。放大、缩小不过都是坐标的线性变换罢了。
      

  6.   

    不知有没人用过protel(电路设计软件)?我要实现的就是那种效果,即是:可以以鼠标点击的那点为中心进行放大,而且无论图片放大还是缩小,各点的相对坐标均保持不变。哪位高手可以指点一下?最好有源码