FMX的ImageViewer控件,如何可以按住鼠标拖动图片?只能用滚动条来显示大图片的不同区域吗?

解决方案 »

  1.   

    fmx控件在渲染前, 会乘以一个变换矩阵,用来实现缩放,旋转,移动等操作,对应sacle, rotate, translate等属性。所以我想在鼠标事件里,改变一下translate属性,或者直接设置这个变换矩阵,就可以实现随鼠标移动了。
      

  2.   

    只需要在鼠标移动时调用ImageViewer的ScrollBy方法
      

  3.   


    float px,py;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ImageViewer1MouseDown(TObject *Sender, TMouseButton Button,
              TShiftState Shift, float X, float Y)
    {
    px=X;
    py=Y;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ImageViewer1MouseMove(TObject *Sender, TShiftState Shift,
              float X, float Y)
    {
    if(Shift.Contains(ssLeft))
    ImageViewer1->ScrollBy(X-px,Y-py);
    }
    //---------------------------------------------------------------------------ScrollBy滚动的太灵敏了,我希望的是移动图片(X-px,Y-py)像素,有没有方法?
    如果ScrollBy时参数乘于一个系数,系数不好计算,因为图片大小不一样。
      

  4.   


    float px,py;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ImageViewer1MouseDown(TObject *Sender, TMouseButton Button,
              TShiftState Shift, float X, float Y)
    {
    px=X;
    py=Y;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ImageViewer1MouseMove(TObject *Sender, TShiftState Shift,
              float X, float Y)
    {
    if(Shift.Contains(ssLeft))
    ImageViewer1->ScrollBy(X-px,Y-py);
    }
    //---------------------------------------------------------------------------ScrollBy滚动的太灵敏了,我希望的是移动图片(X-px,Y-py)像素,有没有方法?
    如果ScrollBy时参数乘于一个系数,系数不好计算,因为图片大小不一样。ScrollBy没法精确地控制移动,比如移动时在图片某区域停止。