先来看看与控件和对象的大小、位置相关的几个属性,已经列表如下:
属性 |
意义 |
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
好了这样我们就不必担心窗体内的控件大小位置不成比例了,由于程序可以自动改变所有控件的大小,只要是窗体内的控件,大小都随之而变化,可谓“一劳永逸”的好办法。
评论