delphi利用ScrollBox实现图像漫游


本文整理自网络,侵删。

 将一个大图在一个小的窗体显示出来,效果同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中获取客户区坐标

Delphi xe将图标和图像添加为资源

Delphi inttohexansi

Delphi tms web core webmemo 横竖滚动条

使用串口模拟工具进行串口程序开发调试

Delphi 判断当前网络连接方式

Delphi 学习 sql 语句 - select(9): 其他

Delphi 注入不用writeprocessmemory 函数

Delphi string.split 按照任意字符串分割语句

Delphi xe6调用android标准功能

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...