我想实现类似acdess那样,用鼠标拖动大image,查了一下以前的资料,有个办法是把image放在label上,这样不太好,还有什么办法吗?

解决方案 »

  1.   

    把Image放在PaintBox中,然后在Image的MouseDown中设置一个Flag,在MouseUp中分别判断X轴,Y轴的位移量再更新Image的位置(Left,Top),清除Flag就可以了!
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Image2: TImage;
        procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      ImageRec:Timage;
      startX,startY:integer;implementation{$R *.dfm}
    procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
            imageRec:=(Sender as TImage);
            StartX:=X;
            StartY:=Y;
    end;procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var tempImage:Timage;
    begin
            if (ssLeft in Shift) then
            begin
                    tempImage:=(Sender as Timage);
                    tempImage.Left:=tempImage.Left+X-StartX;
                    tempImage.Top:=tempImage.Top+Y-StartY;
            end;
    end;end.
      

  3.   

    ImageRec:Timage;//这个东西没什么用处,删掉就可以...