Attribute VB_Name = "mScaleForm"
Option Explicit

Public frmOriginalHeight As Single
Public frmOriginalWidth As Single

Public Type ControlDimensions
    vOriginalHeight As Single
    vOriginalWidth As Single
    vOriginalTop As Single
    vOriginalLeft As Single
End Type

Public OriginalControlDimensionsArray() As ControlDimensions

Public Sub InitSize(FormName As Form)
    frmOriginalHeight = FormName.Height
    frmOriginalWidth = FormName.Width
    
    ReDim OriginalControlDimensionsArray(FormName.Controls.Count)
    
    Dim i As Integer
    For i = 0 To (FormName.Controls.Count - 1)
        OriginalControlDimensionsArray(i).vOriginalHeight = FormName.Controls(i).Height
        OriginalControlDimensionsArray(i).vOriginalWidth = FormName.Controls(i).Width
        OriginalControlDimensionsArray(i).vOriginalTop = FormName.Controls(i).Top
        OriginalControlDimensionsArray(i).vOriginalLeft = FormName.Controls(i).Left
        
        Select Case TypeName(FormName.Controls(i))
            Case "Label"
                'Set Font Ratio appropriate to control
            Case "ComboBox"
                'Set Font Ratio appropriate to control
            Case Else
                'Skip
        End Select
    Next i
End Sub

Public Sub ScaleControls(FormName As Form)
    Dim i As Integer
    Dim OrigWid As Single
    For i = 0 To (FormName.Controls.Count - 1)
        OrigWid = FormName.Controls(i).Width
        
        'Resize based on array
        FormName.Controls(i).Width = OriginalControlDimensionsArray(i).vOriginalWidth * (FormName.Width / frmOriginalWidth)
        FormName.Controls(i).Top = OriginalControlDimensionsArray(i).vOriginalTop * (FormName.Height / frmOriginalHeight)
        FormName.Controls(i).Left = OriginalControlDimensionsArray(i).vOriginalLeft * (FormName.Width / frmOriginalWidth)
        
        Select Case TypeName(FormName.Controls(i))
            Case "Label"
                'Resize Font appropriate to label
                FormName.Controls(i).Font.Size = FormName.Controls(i).Font.Size * (FormName.Controls(i).Width / OrigWid)
                'Alter size
                FormName.Controls(i).AutoSize = True
            Case "ComboBox"
                'Resize Font appropriate to combobox
                FormName.Controls(i).Font.Size = FormName.Controls(i).Font.Size * (FormName.Controls(i).Width / OrigWid)
            Case "CommandButton"
                'Alter height
                FormName.Controls(i).Height = OriginalControlDimensionsArray(i).vOriginalHeight * (FormName.Height / frmOriginalHeight)
                'Resize Font appropriate to command button
                FormName.Controls(i).Font.Size = FormName.Controls(i).Font.Size * (FormName.Controls(i).Width / OrigWid)
            Case Else
                'Alter height
                FormName.Controls(i).Height = OriginalControlDimensionsArray(i).vOriginalHeight * (FormName.Height / frmOriginalHeight)
        End Select
    Next i
End Sub
