浏览大图的问题(85分)

  • 主题发起人 主题发起人 toofy45
  • 开始时间 开始时间
T

toofy45

Unregistered / Unconfirmed
GUEST, unregistred user!
在浏览大图时,当前窗口不能完全显示时,想用鼠标拖动图像滚动,就像ACDSEE那样的效果,该如何实现呢
 
把Image放在一个容器上,panel或ScrollBox。Image.AutoSize:=True;
下面是代码,已经测试:
private
IsMove:boolean;
pt :Tpoint;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsMove:=true;
pt:=Point(X,Y);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if IsMove then
begin
Image1.Left:= Image1.Left+(X-pt.X);
Image1.Top:= Image1.Top+(Y-pt.Y);
pt:=Point(X,Y);
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if IsMove then IsMove:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
self.DoubleBuffered:=true;
end;
 
你把Image放在一个Panel1中,然后在设置Panel1.AutoSize:=True;Image.AutoSize:=Tru;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
TControl(Panel1).Perform(WM_SYSCOMMAND,$F012,0);
end;
 
TYZhang的方法更简练,他移动的是容器。

问题解决了就早点结帖
 
屏幕刷新很厉害,效果不好,这个怎么解决?
 
DoubleBuffered:=true;
 
多人接受答案了。
 
后退
顶部