Option Explicit
Dim arrControls() As ControlInfo 'Benutzerdef. Datentyp
Dim lngOldWidth As Long, lngOldHeight As Long
Private Sub Form_Load()
Dim lngCounter As Long
Dim ctrl As Control
'Einige Controls lassen das Auslesen nicht zu, deshalb "On Error"
On Error Resume Next
lngCounter = 0
For Each ctrl In Me.Controls 'Jedes Control der Form wird durchlaufen
ReDim Preserve arrControls(lngCounter) As ControlInfo
'Höchster Indes des Array wird mit den Parametern gefüllt
With arrControls(lngCounter)
.ControlName = ctrl.Name
.Left = ctrl.Left
.Top = ctrl.Top
.Height = ctrl.Height
.Width = ctrl.Width
.FontSize = ctrl.Font.Size
End With
'Zähler wird erhöht
lngCounter = lngCounter + 1
Next ctrl
'Diese Werte dienen als Grundlage für die Berechnung der Scaling-Faktoren
lngOldWidth = Me.Width: lngOldHeight = Me.Height
End Sub
Private Sub Form_Resize()
Dim i As Long
Dim sngXFactor As Single, sngYFactor As Single, sngFontFactor As Single
'Faktor in x- und y-Richtung
sngXFactor = Me.Width / lngOldWidth
sngYFactor = Me.Height / lngOldHeight
'Faktor für die Schrift wird extra ermittelt
If sngXFactor > sngYFactor Then sngFontFactor = sngYFactor Else sngFontFactor = sngXFactor
'Es existieren einige Ausnahmen, wo die Werte nicht angepasst werden können
On Error Resume Next
For i = 0 To UBound(arrControls)
'Alle Werte werden entsprechend des berechneten Faktors skaliert
With Me.Controls(arrControls(i).ControlName)
.Left = sngXFactor * arrControls(i).Left
.Top = sngYFactor * arrControls(i).Top
.Width = sngXFactor * arrControls(i).Width
.Height = sngYFactor * arrControls(i).Height
.FontSize = Int(sngFontFactor * arrControls(i).FontSize)
End With
Next i
End Sub