正文

自动改变控件大小2005-09-25 07:38:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/5246.html

分享到:

首页 教学区 技术资料区 留言 技术讨论 我要投稿
--趣味程序源码注解--自动改变控件大小--

  由于我们设计窗体时,安排的各个控件的大小和位置是固定的,如果在程序运行过程中窗体大小发生了变化,就会造成控件大小与窗体大小不成比例。怎样简单快捷的解决这个问题呢?本例给出了一个不错的方法。

  为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:


  先来看看与控件和对象的大小、位置相关的几个属性,已经列表如下:

属性 意义
ScaleWidth、ScaleHeight 用 ScaleLeft、ScaleTop、ScaleHeight 和 ScaleWidth 来完成基于对象内部尺寸的操作,如绘出或移动包含在该对象中的对象。
ScaleLeft、ScaleTop
Left、Top 用 Left、Top、Height 和 Width 属性来完成基于对象外部维数的操作,如移动或改变尺寸。对于窗体内放置的控件,这几个属性代表控件相对于窗体的位置;而对于窗体应用这几个属性则表示窗体相对于屏幕的位置。
Width、Height

  程序实现的基本思路是在窗体大小改变前取得窗体的ScaleWidth、ScaleHeight以及窗体内各个控件的Left、Top、Width、Height属性,并把它们保存起来。当窗体的大小被改变时,用窗体的新ScaleWidth、ScaleHeight与改变前的值相比,得到一个缩放比例,然后把这个比例与控件的Left、Top、Width、Height属性的乘积作为新的控件位置和大小,重画这些控件。下面是实现的步骤:

   1、得到原有窗体ScaleWidth、ScaleHeight属性:
   FormOldWidth = FormName.ScaleWidth
   FormOldHeight = FormName.ScaleHeight
   2、取得各个控件的Left、Top、Width、Height属性并把它们存放在控件的Tag属性中:
   Dim Obj As Control   'Control是一个对象,表示所有 Visual Basic 内部控件的类名
   For Each Obj In FormName
   'Tag返回或设置一个表达式用来存储程序中需要的额外数据。
   Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
   Next Obj
   3、当窗体大小改变时计算缩放比例:
   '保存窗体宽度缩放比例
   ScaleX = FormName.ScaleWidth / FormOldWidth
   '保存窗体高度缩放比例
   ScaleY = FormName.ScaleHeight / FormOldHeight
   4、读取控件的原始位置与大小,并根据缩放比例重新安置控件:
   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

  好了这样我们就不必担心窗体内的控件大小位置不成比例了,由于程序可以自动改变所有控件的大小,只要是窗体内的控件,大小都随之而变化,可谓“一劳永逸”的好办法。

阅读(2024) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册