Auto Resize Controls

By | 2018-03-18

This will Resize your controls automatically when every time the form is resized. It can also prevent the controls for resizing. You can also use this for custom controls.

Put this code on the form_load event:

G_P_AdjustFormon

Put this code on the form_Resize event

G_P_FormResize

Finally, place this code in a module:

Option Explicit

Public Xtwips As Integer, Ytwips As Integer
Public Xpixels As Integer, Ypixels As Integer

Type FRMSIZE
   Height As Long
   Width As Long
End Type

Public RePosForm As Boolean
Public DoResize As Boolean
Dim MyForm As FRMSIZE
Dim DesignX As Integer
Dim DesignY As Integer
Dim ScaleFactorX As Single, ScaleFactorY As Single

Sub Resize_For_Resolution(ByVal SFX As Single, ByVal SFY As Single, MyForm As Form)
   Dim i As Integer
   Dim SFFont As Single
   SFFont = (SFX + SFY) / 2.2
   On Error Resume Next
   With MyForm
      For i = 0 To .Count - 1
         If TypeOf .Controls(i) Is DataGrid Then
            .Controls(i).Left = .Controls(i).Left * SFX
            .Controls(i).Top = .Controls(i).Top * SFY
            .Controls(i).Width = .Controls(i).Width * SFX
         ElseIf TypeOf .Controls(i) Is Label Then
            .Controls(i).Move .Controls(i).Left * SFX, _
            .Controls(i).Top * SFY, _
            .Controls(i).Width * SFX, _
            .Controls(i).Height
         ElseIf TypeOf .Controls(i) Is CommandButton Then
            .Controls(i).Move .Controls(i).Left * SFX, _
            .Controls(i).Top * SFY, _
            .Controls(i).Width * SFX, _
            .Controls(i).Height
         Else
            .Controls(i).Move .Controls(i).Left * SFX, _
            .Controls(i).Top * SFY, _
            .Controls(i).Width * SFX, _
            .Controls(i).Height * SFY
         End If
      Next i
      If RePosForm Then
         .Move .Left * SFX, .Top * SFY, .Width * SFX, .Height * SFY
      End If
   End With
End Sub

Public Sub G_P_FormResize(TheForm As Form)

   Dim ScaleFactorX As Single, ScaleFactorY As Single

   If Not DoResize Then
      DoResize = True
      Exit Sub
   End If

   RePosForm = False
   ScaleFactorX = TheForm.Width / MyForm.Width
   ScaleFactorY = TheForm.Height / MyForm.Height
   Resize_For_Resolution ScaleFactorX, ScaleFactorY, TheForm
   MyForm.Height = TheForm.Height
   MyForm.Width = TheForm.Width

End Sub

Public Sub G_P_AdjustForm(TheForm As Form, Optional DX As Integer = 640, Optional DY As Integer = 480)

   Dim Res As String ' Returns resolution of system

   ' Put the design time resolution in here
   ' provide DX , DY as design time resolution of form
   ' i.e. the resulution of Programmers Machine

   DesignX = DX
   DesignY = DY
   RePosForm = True
   DoResize = False
   Xtwips = Screen.TwipsPerPixelX
   Ytwips = Screen.TwipsPerPixelY
   Ypixels = Screen.Height / Ytwips
   Xpixels = Screen.Width / Xtwips
   ScaleFactorX = (Xpixels / DesignX)
   ScaleFactorY = (Ypixels / DesignY)
   TheForm.ScaleMode = 1
   Resize_For_Resolution ScaleFactorX, ScaleFactorY, TheForm
   Res = Str$(Xpixels) + " by " + Str$(Ypixels)
   'Debug.Print Res
   MyForm.Height = TheForm.Height
   MyForm.Width = TheForm.Width

End Sub

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.