Ok, here is version 2.0.0:

In a Class Module (Leave the name as Class1):
VB Code:
  1. Option Explicit
  2. Public a As Long
  3. Public sngFrmTop As Single
  4. Public sngFrmLeft As Single
  5. Public sngFrmHeight As Single
  6. Public sngFrmWidth As Single
  7.  
  8. Public Sub ControlResize(FormName As Form)
  9. On Error GoTo ControlResize_Error
  10.  
  11. With FormName
  12.     If .WindowState = vbMinimized Then Exit Sub
  13.    
  14.         sngFrmTop = .Top
  15.         sngFrmLeft = .Left
  16.         sngFrmHeight = .Height
  17.         sngFrmWidth = .Width
  18.        
  19.         For a = 0 To .Controls.Count - 1
  20.             With .Controls(a)
  21.                 .FontSize = Int(sngFrmHeight * ControlMetrix(a).sngCntFontSize)
  22.                 .Top = sngFrmHeight * ControlMetrix(a).sngCntTop
  23.                 .Left = sngFrmWidth * ControlMetrix(a).sngCntLeft
  24.                 .Height = sngFrmHeight * ControlMetrix(a).sngCntHeight
  25.                 .Width = sngFrmWidth * ControlMetrix(a).sngCntWidth
  26.             End With
  27.         Next a
  28.        
  29. End With
  30.  
  31. On Error GoTo 0
  32. Exit Sub
  33.  
  34. ControlResize_Error:
  35. If Err.Number = 383 Or Err.Number = 438 Or _
  36.         Err.Number = 380 Then
  37.      'Catch Error for controls with read only properties
  38.     Resume Next
  39. Else
  40.     MsgBox "Error " & Err.Number & " (" & Err.Description & _
  41.           ") in procedure ControlResize of Class Module Class1"
  42. End If
  43.  
  44. End Sub
  45.  
  46. Public Sub GetFormMetrix(FormName As Form)
  47. On Error GoTo GetFormMetrix_Error
  48.  
  49. With FormName
  50.     sngFrmTop = .Top
  51.     sngFrmLeft = .Left
  52.     sngFrmHeight = .Height
  53.     sngFrmWidth = .Width
  54.    
  55.     ReDim ControlMetrix(.Controls.Count - 1)
  56.        
  57.     For a = 0 To .Controls.Count - 1
  58.    
  59.         With .Controls(a)
  60.             ControlMetrix(a).sngCntTop = (.Top / sngFrmHeight)
  61.             ControlMetrix(a).sngCntLeft = (.Left / sngFrmWidth)
  62.             ControlMetrix(a).sngCntHeight = (.Height / sngFrmHeight)
  63.             ControlMetrix(a).sngCntWidth = (.Width / sngFrmWidth)
  64.             ControlMetrix(a).sngCntFontSize = (.FontSize / sngFrmHeight)
  65.         End With
  66.    
  67.     Next a
  68. End With
  69.  
  70. On Error GoTo 0
  71. Exit Sub
  72.  
  73. GetFormMetrix_Error:
  74. If Err.Number = 13 Or Err.Number = 383 Or Err.Number = 438 Or _
  75.         Err.Number = 380 Then
  76.      'Catch Error for controls with read only properties
  77.     Resume Next
  78. Else
  79.     MsgBox "Error " & Err.Number & " (" & Err.Description & _
  80.           ") in procedure GetFormMetrix of Class Module Class1"
  81. End If
  82. End Sub

In a BAS Module:
VB Code:
  1. Option Explicit
  2.  
  3. Public Type ControlMetrix
  4.     sngCntTop As Single
  5.     sngCntLeft As Single
  6.     sngCntHeight As Single
  7.     sngCntWidth As Single
  8.     sngCntFontSize As Single
  9. End Type
  10.  
  11. Public ControlMetrix() As ControlMetrix

and in the Form copy the following code and
place some controls in various positions on the form:
VB Code:
  1. Option Explicit
  2.  
  3. Private FormResize As Class1
  4.  
  5. Private Sub Form_Load()
  6.     Set FormResize = New Class1
  7.     Call FormResize.GetFormMetrix(Me)
  8. End Sub
  9.  
  10. Private Sub Form_Resize()
  11.     Call FormResize.ControlResize(Me)
  12. End Sub