Foxtable(狐表)用户栏目专家坐堂 → 如何让标签跟随图片放大一起移动位置


  共有2800人关注过本帖树形打印复制链接

主题:如何让标签跟随图片放大一起移动位置

帅哥哟,离线,有人找我吗?
天若千颖
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
如何让标签跟随图片放大一起移动位置  发帖心情 Post By:2016/6/23 10:43:00 [只看该作者]

如图,再很多时候,一个窗口没法清晰的显示图片,尤其是地图这样的图片。

我根据示例中的“中国地图”的做法,通过文字标签设置了几个点,点击这几个点就可以显示不同的信息。

但有的时候需要对图片放大,放大之后移动。

 

 如图,没有放大的时候,标签处是公路:


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

 

图片放大或者用鼠标移动之后,标签的地方就不再是公路了。
 


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

 

有没有办法让标注的文字标签的文字如何跟随图片放大和移动?

 

或者说,像示例“中国地图”中,如果我把地图放大了,如何让可点击的位置可以跟随放大的图片一起移动,这样,即使地图放大或者移动了,我点击放大后的图片上“北京”这个地方,显示的是北京的信息,而不是别的地方。

 

 


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:图片缩放例子.rar


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/6/23 10:44:00 [只看该作者]

添加一个Foxtable的示例图片

 


图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/23 11:06:00 [只看该作者]

比如,放大,就这样处理,但是有时候会有误差的

 

Dim lbl As WinForm.Label = e.Form.Controls("Label2")
lbl.left = lbl.left*1.05
lbl.top = lbl.top*1.05


 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/6/23 12:15:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:4871 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2016/7/1 10:17:00 [只看该作者]

您好,虽然之前很多老师在论坛上给过这样一个窗口放大缩小的代码:

Afterload事件

 

vars("width") = e.Form.width
vars("height") = e.Form.height

 

SizeChanged事件

 

For Each c As Winform.Control In e.Form.Controls
    c.Left = c.Left * (e.Form.Width / vars("width"))
    c.Top = c.Top * (e.Form.Height / vars("height"))
    c.Width = c.Width * (e.Form.Width / vars("width"))
    c.Height = c.Height * (e.Form.Height / vars("height"))
Next
msgbox(e.Form.Height / vars("height"))
vars("width") = e.Form.width
vars("height") = e.Form.height



但是这个代码有很对弊端,从原始大小再到最大化基本没有问题,但是从最大化之后再恢复大小,很多空间的大小或者位置就变化了。例如你之前发的一个例子,我换成上述代码,变形自后,button按钮明显变形了
 
此主题相关图片如下:截图.png
按此在新窗口浏览图片

比如,我用的窗口
 
此主题相关图片如下:界面.png
按此在新窗口浏览图片
在原始大小界面,把A窗口放大到最大,然后再在放大的界面下切换到B窗口,这个时候B窗口显示的内容坐标比较乱,有的 时候就不是左上角(0,0)开始。
 
你的这种方案对窗口里面的Button按钮的大小进行了设置,
 
Dim Button1 As WinForm.Button = e.Form.Controls("Button1")
If img.width / img.height >= PictureBox1.Width / PictureBox1.Height Then
    rate = PictureBox1.Width  / width
    width = PictureBox1.Width
    height  = height*rate
    Button1.Left = Vars("left")*rate
    Button1.Top = Vars("top")*rate +(PictureBox1.Height - height)/2
Else
    rate = PictureBox1.Height / height
    height = PictureBox1.Height
    width = width * rate
    Button1.Top = Vars("top")*rate   
    Button1.Left = Vars("left")*rate+(PictureBox1.Width - width)/2
End If
如果我要设计2楼这样的中国地图,窗口里面有多个Lable标签,要想实现窗口和标签放大了也能一一标注,位置准确,那么我得每一个Lable都加一个这样得代码吧?
 




 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/1 10:35:00 [只看该作者]

 自适应计算会有误差,那没办法。

 

 有问题做实例说明。


 回到顶部