Option Explicit
Dim record(), firstload(1) As Single
Dim obj As Variant
Dim i As Integer
Dim w As Variant
Private Sub Form_Activate()
If firstload(0) = 0 Then '原始值只記錄一次
firstload(0) = Form1.ScaleWidth
firstload(1) = Form1.ScaleHeight '一開始表單的大小
ReDim record(Form1.Controls.Count - 1, 5)
i = 0
For Each obj In Form1.Controls '記錄每個物件的資料
record(i, 0) = obj.Name
On Error Resume Next '避免某些物件沒有指定的屬性而錯誤
record(i, 1) = obj.Left
record(i, 2) = obj.Top
record(i, 3) = obj.Width
record(i, 4) = obj.Height
record(i, 5) = obj.FontSize
On Error GoTo 0 '取消錯誤處理
i = i + 1
Next obj
End If
End Sub
Private Sub Form_Resize()
If Form1.WindowState <> 1 And firstload(0) > 0 And firstload(1) > 0 Then
'重算物件的新位置
For obj = 0 To Form1.Controls.Count - 1
Set w = Controls(record(obj, 0))
On Error Resume Next
w.Left = record(obj, 1) / firstload(0) * Form1.ScaleWidth
w.Top = record(obj, 2) / firstload(1) * Form1.ScaleHeight
w.Width = record(obj, 3) / firstload(0) * Form1.ScaleWidth
w.Height = record(obj, 4) / firstload(1) * Form1.ScaleHeight
If Form1.ScaleWidth / firstload(0) < Form1.ScaleHeight / firstload(1) Then
w.FontSize = record(obj, 5) / firstload(0) * Form1.ScaleWidth
Else
w.FontSize = record(obj, 5) / firstload(1) * Form1.ScaleHeight
End If
On Error GoTo 0
Set w = Nothing
Next obj
End If
End Sub