有个地图,可以放大缩小移动,上面有些指示按钮,如同Google地图一样,
当地图放大时,如何同时调节按钮的位置,保持与地图的相对位置不变。
我的思路是以像素点做按钮的坐标,求救高手。

解决方案 »

  1.   

    '以下代码写在标准模块中   
      Option   Explicit   
      Private   FormOldWidth   As   Long       '保存窗体的原始宽度   
      Private   FormOldHeight   As   Long     '保存窗体的原始高度   
        
      '在调用ResizeForm前先调用本函数   
      Public   Sub   ResizeInit(FormName   As   Form)   
          Dim   Obj   As   Control   
          FormOldWidth   =   FormName.ScaleWidth'记录窗体的原始宽度   
          FormOldHeight   =   FormName.ScaleHeight'记录窗体的原始高度   
          On   Error   Resume   Next   
          For   Each   Obj   In   FormName   
              Obj.Tag   =   Obj.Left   &   "   "   &   Obj.Top   &   "   "   &   Obj.Width   &   "   "   &   Obj.Height   &   "   "   
          Next   Obj   
          On   Error   GoTo   0   
      End   Sub   
        
      '按比例改变表单内各元件的大小,   
      '在调用ReSizeForm前先调用ReSizeInit函数   
      Public   Sub   ResizeForm(FormName   As   Form)   
          Dim   Pos(4)   As   Double   
          Dim   i   As   Long,   TempPos   As   Long,   StartPos   As   Long   
          Dim   Obj   As   Control   
          Dim   ScaleX   As   Double,   ScaleY   As   Double   
          '在调试时如果出现除数为零错误,是因为没有设定form的初值,请双击form1然后再测试,这个问题绝对不会在编译好的程序中出现   
          If   FormOldWidth   =   0   Then   '防止该错误的产生   
              Exit   Sub   
          End   If   
          ScaleX   =   FormName.ScaleWidth   /   FormOldWidth       '保存窗体宽度缩放比例   
          ScaleY   =   FormName.ScaleHeight   /   FormOldHeight   '保存窗体高度缩放比例   
          On   Error   Resume   Next   
          For   Each   Obj   In   FormName   
              StartPos   =   1   
          For   i   =   0   To   4   
              '读取控件的原始位置与大小   
              TempPos   =   InStr(StartPos,   Obj.Tag,   "   ",   vbTextCompare)   
              If   TempPos   >   0   Then   
                  Pos(i)   =   Mid(Obj.Tag,   StartPos,   TempPos   -   StartPos)   
                  StartPos   =   TempPos   +   1   
              Else   
                  Pos(i)   =   0   
              End   If   
              '根据控件的原始位置及窗体改变大小   
              '按比例对控件重新定位与改变大小   
              Obj.Move   Pos(0)   *   ScaleX,   Pos(1)   *   ScaleY,   Pos(2)   *   ScaleX,   Pos(3)   *   ScaleY   
          Next   i   
          Next   Obj   
          On   Error   GoTo   0   
      End   Sub   
        
      '窗体代码:   
      Option   Explicit   
      Private   Sub   Form_Load()   
              ResizeInit   Me   
      End   Sub   
        
      Private   Sub   Form_Resize()   
              ResizeForm   Me   
      End   Sub   
          
            我也是找人要的.我调试很好使.你试试.
    Top6 楼faysky2(
    ----------------------------------
    借鉴这个解决,进行中
      

  2.   

    Private Sub signZoom(ByVal newleft As Double, ByVal newtop As Double, ByVal newwidth As Double, ByVal newheight As Double)
    leftratio = 0.6
    topratio = 0.3signleft = newleft + newwidth * leftratio
    signtop = newtop + newheight * topratio
     Image2.Move signleft, signtop, 350, 350
    End Sub
    搞定了,谢谢SYSSZ(老张)提到的比例二字