Dim lWidth As Long, lHeight As LongPrivate Sub Form_Load() lWidth = Me.Width lHeight = Me.Height End SubPrivate Sub Form_Resize() If Me.WindowState <> 1 Then On Error Resume Next Text1.Width = Text1.Width + Me.Width - lWidth Text1.Height = Text1.Height + Me.Height - lHeight lWidth = Me.Width lHeight = Me.Height End If End Sub
Option Explicit Private ObjOldWidth As Long 保存窗体的原始宽度 Private ObjOldHeight As Long 保存窗体的原始高度 Private ObjOldFont As Single 保存窗体的原始字体比在调用ResizeForm前先调用本函数 Public Sub ResizeInit(FormName As Form) Dim Obj As Control
ObjOldWidth = FormName.ScaleWidth ObjOldHeight = FormName.ScaleHeight ObjOldFont = FormName.Font.Size / ObjOldHeight 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
ScaleX = FormName.ScaleWidth / ObjOldWidth 保存窗体宽度缩放比例 ScaleY = FormName.ScaleHeight / ObjOldHeight 保存窗体高度缩放比例 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
On Error GoTo 0 End SubPrivate Sub Form_Resize() 确保窗体改变时控件随之改变 Call ResizeForm(Me) End SubPrivate Sub Form_Load() 在程序装入时必须加入 Call ResizeInit(Me) End Sub
lWidth = Me.Width
lHeight = Me.Height
End SubPrivate Sub Form_Resize()
If Me.WindowState <> 1 Then
On Error Resume Next
Text1.Width = Text1.Width + Me.Width - lWidth
Text1.Height = Text1.Height + Me.Height - lHeight
lWidth = Me.Width
lHeight = Me.Height
End If
End Sub
1、锁定窗口大小,这种方法最不可取,不过还是有很多人在用,甚至像一些知名大公司做的产品里都有这种情况。
2、对每个控件写代码来控制布局,这是比较通常的做法。在容器改变大小时,调整容器内控件的大小和位置,代码量较大,不适合作复杂表单。
3、做一些布局控件,如模仿Java里面的流式布局、边界布局及网格式布局等,让布局容器来控制控件位置及大小。组合使用布局控件可以设计出非常复杂的表单,而且几乎不用写什么代码。
resize好了
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/awt/BorderLayout.html
Private ObjOldWidth As Long 保存窗体的原始宽度
Private ObjOldHeight As Long 保存窗体的原始高度
Private ObjOldFont As Single 保存窗体的原始字体比在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
ObjOldWidth = FormName.ScaleWidth
ObjOldHeight = FormName.ScaleHeight
ObjOldFont = FormName.Font.Size / ObjOldHeight
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
ScaleX = FormName.ScaleWidth / ObjOldWidth
保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / ObjOldHeight
保存窗体高度缩放比例
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
Obj.Font.Size = ObjOldFont * FormName.ScaleHeight
Next i
Next Obj
On Error GoTo 0
End SubPrivate Sub Form_Resize()
确保窗体改变时控件随之改变
Call ResizeForm(Me)
End SubPrivate Sub Form_Load()
在程序装入时必须加入
Call ResizeInit(Me)
End Sub
TO: fj182(阿花) 就是这类布局控制,我用过 Java、 Python 的 GUI 为什么单单 VB 没有这个?? 这么实用的东西……