Imgedit控件就有这个功能,使用起来很方便的

解决方案 »

  1.   

    兄弟对你这么好记得给分啊
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, jpeg, StdCtrls;type
      TForm1 = class(TForm)
        ScrollBox1: TScrollBox;
        Image1: TImage;
        Label1: TLabel;
        Label2: TLabel;
        procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
          MousePos: TPoint; var Handled: Boolean);
        procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
          MousePos: TPoint; var Handled: Boolean);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }  public
        { Public declarations }
        Curp:TPoint;
        FSPoint,FPoint:TPoint;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      FPoint.X:=  (Sender as TImage).ClientToParent(Point(X,Y)).X;
      FPoint.Y:=  (Sender as TImage).ClientToParent(Point(X,Y)).Y;  FSPoint.X:=(Sender as TImage).Left;
      FSPoint.Y:=(Sender as TImage).Top;
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var Form_X,Form_Y:Integer;
    begin
    //
        Form_X:=Image1.Left +ScrollBox1.Left + x;
        Form_Y:=Image1.Top + Scrollbox1.Top + y;
        Curp.X :=Form_X;
        CurP.Y := Form_Y;
        Label1.Caption := Inttostr(Form_x);   if (ssleft in shift) then//按下鼠标左按钮
       begin
          (Sender as TImage).Left:=FSPoint.X+ (Sender as TImage).ClientToParent(Point(X,Y)).X-FPoint.X;
          (Sender as TImage).Top:=FSPoint.Y+ (Sender as TImage).ClientToParent(Point(X,Y)).Y-FPoint.Y;
       end;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        Curp.X :=X;
        CurP.Y := Y;
        label1.Caption := Inttostr(Curp.X);end;procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    var x,Y:Integer;
    begin
       If (Curp.X>Scrollbox1.Left) and (curp.X< (Scrollbox1.Left +Scrollbox1.Width))
       and (Image1.Width <=2400) then
       begin
          X:=Curp.X -(Image1.Left +ScrollBox1.Left);
          Y:=Curp.Y -(Image1.Top +ScrollBox1.Top);
          Image1.Top := Image1.Top +y -Trunc(1.5*y);
          Image1.Left := Image1.Left +x-Trunc(1.5*x);
          Image1.Height := Trunc(1.5* Image1.Height);
          Image1.Width :=  Trunc(1.5*Image1.Width);
       end;
    end;procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    var x,Y:Integer;
    begin
    {   If (Curp.X>Scrollbox1.Left) and (curp.Y< (Scrollbox1.Left +Scrollbox1.Width))
       and (Image1.Width <=ScrollBox1.Width) then
       begin
           Image1.Left := 0 ;
           Image1.Top := 0 ;
           Image1.Height := Scrollbox1.Height ;
           Image1.Width :=  Scrollbox1.Width ;
       end
       else
       If (Curp.X>Scrollbox1.Left) and (curp.Y< (Scrollbox1.Left +Scrollbox1.Width)) then
       begin      }
          X:=Curp.X -(Image1.Left +ScrollBox1.Left);
          Y:=Curp.Y -(Image1.Top +ScrollBox1.Top);
          Image1.Top := Image1.Top +y -Trunc(0.8*y);
          Image1.Left := Image1.Left +x-Trunc(0.8*x);
          Image1.Height := Trunc(0.8* Image1.Height);
          Image1.Width :=  Trunc(0.8*Image1.Width);
    //   end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
       DoubleBuffered:=true;
    end;end.