以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何让标签跟随图片放大一起移动位置  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=86683)

--  作者:天若千颖
--  发布时间:2016/6/23 10:43:00
--  如何让标签跟随图片放大一起移动位置

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

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

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

 

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


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

 

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


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

 

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

 

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

 

 


 

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


--  作者:天若千颖
--  发布时间:2016/6/23 10:44:00
--  

添加一个Foxtable的示例图片

 


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

--  作者:大红袍
--  发布时间: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
--  发布时间:2016/6/23 12:15:00
--  
看看:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=83752
--  作者:天若千颖
--  发布时间: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都加一个这样得代码吧?
 




--  作者:大红袍
--  发布时间:2016/7/1 10:35:00
--  

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

 

 有问题做实例说明。