本文整理自网络,侵删。
将一个大图在一个小的窗体显示出来,效果同adobe reader的那个手型工具,原理很简单,先拖一个scrollbox控件,然后在该控件上放置一个image控件用于加载大图片。核心是移动大小的计算。代码如下,希望能对需要的同志有帮助。
unit RealWinPicU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,jpeg, ComCtrls, StdCtrls;
type
TRealWinPicF = class(TForm)
Image1: TImage;
ScrollBox1: TScrollBox;
procedure FormShow(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
RealWinPicF: TRealWinPicF;
MoveFlag:Boolean;
startPos,endPos:TPoint;
implementation
{$R *.dfm}
procedure TRealWinPicF.FormShow(Sender: TObject);
var
myjpg:TJPEGImage;
mybmp:TBitmap;
begin
myjpg:=TJPEGImage.Create;
myjpg.LoadFromFile('./temp/1.jpg');
Image1.Picture.Bitmap.Assign(myjpg);
ScrollBox1.HorzScrollBar.Range:=myjpg.Width;
ScrollBox1.VertScrollBar.Range:=myjpg.Height;
myjpg.free;
end;
procedure TRealWinPicF.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
MoveFlag:=True;
startPos.X:=x;
startPos.Y:=y;
end;
procedure TRealWinPicF.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MoveFlag:=False;
end;
procedure TRealWinPicF.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
Vx,Vy:Integer;//x,y位移。
begin
Self.Caption:='x:'+IntToStr(x)+' Y:'+inttostr(y);
if MoveFlag then
begin
Vx:=x-startpos.X;
Vy:=y-startpos.Y;
ScrollBox1.HorzScrollBar.Position:=ScrollBox1.HorzScrollBar.Position-Vx*(Image1.Width div ScrollBox1.HorzScrollBar.Range);
ScrollBox1.VertScrollBar.Position:=ScrollBox1.VertScrollBar.Position-Vy*(Image1.Height div ScrollBox1.VertScrollBar.Range);
end;
end;
end.
相关阅读 >>
Delphi中使用内联变量(inline variables) 的5个理由
Delphi 任务栏显示进度条 createcomobject(clsid_taskbarlist) as itaskbarlist4
更多相关阅读请进入《Delphi》频道 >>