在很多图片查看软件中,都有用鼠标拖动来显示大尺寸图片的功能,我是用delphi来编写的,我把Timage控件放到ScrollBox中,当采用以下从网上找到的代码(代码如下),结果鼠标拖动时候,光在那边闪,图像始终没有移动成功,不知道是不是哪里还要设置一下控件的属性呢,希望各位高手指点一下,不胜感激!
实现鼠标对图象的拖动   
  var   d:boolean;   
        ox,oy:integer;   
    
  procedure   TForm1.Image1MouseDown(Sender:   TObject;   Button:   TMouseButton;   
      Shift:   TShiftState;   X,   Y:   Integer);   
  begin   
      d:=true;   
      ox:=x;   
      oy:=y;   
  end;   
    
  procedure   TForm1.Image1MouseMove(Sender:   TObject;   Shift:   TShiftState;   X,   
      Y:   Integer);   
  begin   
      if   d   then   
          ScrollBox1.ScrollBy(x-ox,y-oy);   
  end;   
    
  procedure   TForm1.Image1MouseUp(Sender:   TObject;   Button:   TMouseButton;   
      Shift:   TShiftState;   X,   Y:   Integer);   
  begin   
      d:=False;   
  end;

解决方案 »

  1.   

    var
      CanMove:Boolean;
      OldX,OldY:Integer;  //开始手动前鼠标的位置//按下鼠标开始拖动
    procedure TFrmMoreExam.imgBigPicMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      CanMove:=true;
      OldX:=X;
      OldY:=y;
    end;//拖动图片
    procedure TFrmMoreExam.imgBigPicMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    begin
      if canmove then
      begin
        imgBigPic.Left:=imgBigPic.Left+x-OldX;
        imgBigPic.top:=imgBigPic.top+y-OldY;
      end;
    end;//放开鼠标,结束拖动
    procedure TFrmMoreExam.imgBigPicMouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      CanMove:=false;
    end;
      

  2.   

    shuihan20e你的代码跟我的有什么区别呢,没有指出关键的问题
      

  3.   

    Align设置为alNone,AutoScroll设置为True,AutoSize设置为False,其它都是默认啊
      

  4.   

    ScrollBox1.ScrollBy(x-ox,y-oy);  
    是怎样的意思呢?
      

  5.   

    你是Image移动,不是SrollBox1移动。。
      

  6.   

    问题解决了,原来TImage控件的align属性应该设置为alNone,不然每次鼠标移动时,都会对齐到客户区,所以图片无法移动,此外还要设置image1的left,top,width,height属性,设置好以后就没问题了。至于jacknes009所说的,不是很准确,确实是image移动,但是我是利用ScrollBox1的ScrollBy函数来实现的,建议你先看看ScrollBy函数的功能介绍
      

  7.   

    此外采用你们的方法拖动的时候,屏幕会一直在闪,不是太好,有些人说设置DoubleBuffered为True,好像也不能解决,不知道为什么!