image用手拖动图片,实现图片的移动,也就是漫游。

吴恒 2007-04-19 11:25:54
image用手拖动图片,实现图片的移动,也就是漫游。
我用delphi做的一个程序,我在一个image里面放了一张大图,image全部显示不出来,我要用手拖动图片,这样图片就能会移动,我就能看到全部图片了。,也就是图的漫游。
就像画图工具里的那个功能一样,有一个大图时,我们按下鼠标,鼠标呈现手形,移动鼠标图片就会移动,帮帮我,
...全文
710 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexanda2000 2007-04-21
  • 打赏
  • 举报
回复
在窗口上先放一个ScrollBox,设置属性去掉里面的滚动条。ScrollBox里面再放Image,它的AutoSize属性可以设置成True,Cursor设成crHandPoint。

属性LZ自己慢慢设吧,代码如下:

TForm2 = class(TForm)
ScrollBox1: TScrollBox;
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
X,Y:Integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Self.X:=X;
Self.Y:=Y;
end;

procedure TForm2.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
ScrollBox1.ScrollBy(X-Self.X,Y-Self.Y);
end;
HsWong 2007-04-21
  • 打赏
  • 举报
回复
TImage有大小限制的说法很难理解。lihuasoft(一九七五)可以实现楼主的效果。
zzzl 2007-04-21
  • 打赏
  • 举报
回复
哈哈哈,你说你把它的长宽设的都很大了,是多大?也不是一样没说吗,还来指责别人。另外,我也没哪句话能证明自己水平高,我只是一个看出了代码问题的人而已,可以理解你的心情,呵呵,我回复时没看你是谁,只看了文字和代码,没有针对你所谓的“我们”,你太敏感了吧?
最后,你说到我回复的风格,我确实是喜欢只指出代码的核心(如果能够的话),类似你那种从form.XXX(); begin 开始写起的的确不同啊,哈哈,但这仅仅是风格问题,你也不能说我那个贴子里的回复是错的,你也不要看它短就说我没试验过。所以,你让我承认错误,我真有点莫明其妙了。再小PS一下,发觉你很喜欢翻旧贴啊,混水园的那种习气,别带到这里来,ok?
lihuasoft 2007-04-20
  • 打赏
  • 举报
回复
承上:

1、一颗星并不代表什么, 我也从没有因为自己升星了而自以为了不起.

2、我对你回复贴子的风格极不赞同,例如本贴,再例如:
http://community.csdn.net/Expert/topic/5475/5475108.xml?temp=.5288202
这贴上,你说的那两行万能代码,真得就是那么厉害吗?自己试验好了,再贴出来!否则,就要及时承认错误!

lihuasoft 2007-04-20
  • 打赏
  • 举报
回复
我悟性是很差. 那请你明示吧, "把image长宽设大点看看它出的提示"-----出什么提示了? 我悟性太差, 我把image的长宽设得都很大了, 还是没有出任何提示.

既然是"这么简单事", 还是请你解释一下吧.要不,你给一个image设得很大的标准,然后,给点代码,我再试一下?

你既然水平比我们高许多,那就不要跟我们这些水平低下的人计较了, 还是把问题说明白吧. 好吗?强人?
吴恒 2007-04-20
  • 打赏
  • 举报
回复
再顶一下
HsWong 2007-04-19
  • 打赏
  • 举报
回复
呵呵~
lihuasoft 2007-04-19
  • 打赏
  • 举报
回复
既然我已经写出代码来了,就贴出来吧,希望楼上不要生气.

var
CanMove : boolean;
X1, Y1 : integer;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CanMove := True;
Image1.Cursor := crHandPoint;
X1 := X;
Y1 := Y;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CanMove := False;
Image1.Cursor := crDefault;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if CanMove then
begin
Image1.Left := Image1.Left + X - X1;
Image1.Top := Image1.Top + Y - Y1;
X1 := X;
Y1 := Y;
end;
end;

闪烁问题,自己解决.
HsWong 2007-04-19
  • 打赏
  • 举报
回复
把图片放在一个Panel里面,设置图片的AutoSize:=true,Cursor:=crHandPoint;
通过改变Panel的大小控制图片可见内容的范围。
然后在图片的OnMouseMove写相关代码,控制图片的Top,Left值。
zzzl 2007-04-19
  • 打赏
  • 举报
回复
timage的大小是有限制的

------------------------------------------

话说得不明不白!!!! 相当于没说!!! 大小是有限制的,是什么意思??????

---------------------------------------------------------------------------

你干嘛火气这么大?大小有限制很难理解吗,你把image长宽设大点看看它出的提示不就知道了,这么简单事让我怎么再解释,看你都一棵星了,没想到没点悟性
lihuasoft 2007-04-19
  • 打赏
  • 举报
回复
楼上的这样移动其实在移动那个panel
------------------------------------

是的,这个,我发错贴了,(今天下午有好几贴都是与image有关的) sorry -_-
lihuasoft 2007-04-19
  • 打赏
  • 举报
回复
应对闪烁, 你可以在image重绘前, 加一句 Form1.DoubleBuffered := True;

但效果不太理想, 所以一直没有说
吴恒 2007-04-19
  • 打赏
  • 举报
回复
楼上的这样移动其实在移动那个panel
吴恒 2007-04-19
  • 打赏
  • 举报
回复
谢谢你楼上的,这样可能解决闪烁问题,只是当图超出image时拖动只能拖动原来可视的部分图,在image外面的图就不会显示了。请教一下
lihuasoft 2007-04-19
  • 打赏
  • 举报
回复
食言了, 没有"到此为止". 给楼主查了查资料,下面的方法供你参考:

把Image放到一个Panel里, Panel设置为AutoSize, 然后在Image的OnMouseMove里加代码:

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ReleaseCapture;
TPanel(TImage(Sender).Parent).Perform(WM_SysCommand,$F012,10);
end;

这样拖动比较简单.
lihuasoft 2007-04-19
  • 打赏
  • 举报
回复
TO 楼主: 伴水清清ZsWang的博客里有一篇文章, C#的, 应该是与我的实现方法完全不一样的, 比我的方法高明, 你去看一下,我没有仔细看. 链接是:

http://blog.sina.com.cn/u/589d32f5010008o1
lihuasoft 2007-04-19
  • 打赏
  • 举报
回复
我的代码不完美. 并不是商业程序. 只供参考. mouse右键可以有手光标. 我不是专家,到此为止.
吴恒 2007-04-19
  • 打赏
  • 举报
回复
to 一九七五
你说的代码中当鼠标按下时,鼠标呈现手形呀?
别外帮忙解决一下闪烁
lihuasoft 2007-04-19
  • 打赏
  • 举报
回复
既然我已看出代码的问题了,就说出来吧,希望楼上的不要生气

timage的大小是有限制的

------------------------------------------

话说得不明不白!!!! 相当于没说!!! 大小是有限制的,是什么意思??????

另:我在写代码时,并不知道HsWong已回复,等我要回复时,刷新了一下网页而已!
吴恒 2007-04-19
  • 打赏
  • 举报
回复
闪烁怎么弄呀?帮帮了我。完了马上结贴呀
加载更多回复(1)

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧