如何在TImage控件中加入滚动条,使控件可以滚动显示大图片(100分)

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

topza

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在TImage控件中加入滚动条,使控件可以滚动显示大图片
 
TScrollBox上面放上TImage不行吗?
 
把TImage放到ScrollBox中。TImage的AutoSize设为True;
 
其实用缩略图更好image的stretch:true;
 
把TImage放到ScrollBox中,缩略图不太好!
 
放在TScrollBox是最简单,最直接的。当然漫游才是最爽的!
方法是:
在窗体上放置一TPanel,然后在TPanel上放置一TImage,再将一TLabel放入TPanel中,
TLabel的设置如下:
Align = AlClient;
Transparent = True;
Caption = '';

var
origin:tpoint;
image_left:integer;
image_top:integer;
visa1:tpoint;
visa2:tpoint;
canmove:boolean;

procedure TDraftForm.Label7MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
origin.X:=x;
origin.Y:=y;
image_left:=image1.Left;
image_top:=image1.Top;
visa1.X:=x-(image1.Width-panel5.Width+image1.Left);
visa1.Y:=y-(image1.Height-panel5.Height+image1.Top);
visa2.X:=x-image1.Left;
visa2.Y:=y-image1.Top;
canmove:=true;
end;
procedure TDraftForm.Label7MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if canmove then
begin
if x<visa1.X then x:=visa1.X;
if x>visa2.X then x:=visa2.X;
if y<visa1.Y then y:=visa1.Y;
if y>visa2.Y then y:=visa2.Y;
image1.Left:=image_left+(x-origin.X);
image1.Top:=image_top+(y-origin.Y);
end;
end;
procedure TDraftForm.Label7MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
canmove:=false;
end;
这样你就可以象AcdSee一样用鼠标拉着图象漫游了。
 
把TImage放到ScrollBox中是可以实现用滚动条拖拉显示大图片,不是如果有几副图要实现
这一功能时,当在第一幅图像在用滚动条拖拉过时,再显示第二幅图时,滚动条的位置不
会复原,如何能让在第次显示另一图片时,都让滚动条在初始位置。
 
每此显示的时候进行初始化。
 
ScrollBox1.AutoScroll := true;
 
如何初始化,用ScrollBox1.AutoScroll := true;是没用的
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
ScrollBox1.VertScrollBar.Position := 0;
ScrollBox1.HorzScrollBar.Position := 0;
Image1.Left := 0;
Image1.Top := 0;
end;
end;
 
多人接受答案了。
 
后退
顶部