也就是说如何象ACDSEE或Acrobat Reader一样拖动一个大于显示窗口的图片或PDF文件?
注:不是通过滚动条拖动,只要点击大于显示窗口的图片或PDF文件就可以在显示窗口内
任意拖动。各位高手救救我吧。
最好能给点代码,说说原理也。

解决方案 »

  1.   

    =======================================
    这里找不到答案吗?来这里试试看!
    这里有问必答
    http://systemer.51.net/cgi-bin/leoboard.cgi
    希望你能在这里找到你满意的答案
    =========================================
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, jpeg;type
      TForm1 = class(TForm)
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        DownPt: Tpoint;
        CurPosition: TPoint;
        Picture: TPicture;
        Bmp: TBitMap;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if ssLeft in Shift then
      begin
        Screen.Cursor := crHourGlass;
        DownPt:= Point(X, Y);
      end;
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Screen.Cursor := crDefault;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
    begin
      if ssLeft in Shift then
      begin
        if (abs(X-DownPt.X)>10)
           or (abs(Y-DownPt.Y)>10) then
        begin
          Bmp.Width := Form1.Width;
          Bmp.Height := Form1.Height;
          Inc(CurPosition.X, X - DownPt.X);
          Inc(CurPosition.Y, Y - DownPt.Y);
          Bmp.Canvas.FillRect(Rect(0,0, Width, Height));
          Bmp.Canvas.Draw(CurPosition.x, CurPosition.Y, Picture.Graphic);
          Form1.Canvas.Draw(0, 0, Bmp);
          DownPt := Point(X, Y);
        end;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      CurPosition := Point(0,0);
      Picture := TPicture.Create;
      Bmp := TBitMap.Create;
      Picture.LoadFromFile('d:\test.jpg');
      Bmp.Canvas.Brush.Color := 0;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      bmp.free;
      Picture.Free;
    end;end.
      

  3.   

    新建一个工程,将上面的代码完全覆盖unit1的代码,然后设置form1的
    鼠标的三个消息onmousedown,move,up,和formcreate的事件,双击就可以了。
    运行起来无闪烁而且很平滑。