How to Create a Resolution Independent Frame in VB.NET

104 46
    • 1). Right-click anywhere on your desktop and select "Properties." Go the the "Settings" tab and change the screen resolution to "800 x 600." You will use this small resolution to create the resolution-independent frame.

    • 2). Open Visual Studio and start a new project. The "Form1" form is created automatically.

    • 3). Go to the form's module and paste the code to make the form resolution-independent:

      Option Explicit

      Dim MyForm As FRMSIZE

      Dim DesignX As Integer

      Dim DesignY As Integer

      Private Sub Form_Load()

      Dim ScaleFactorX As Single, ScaleFactorY As Single ' Scaling factors

      ' Size of Form in Pixels at design resolution

      DesignX = 800

      DesignY = 600

      RePosForm = True ' Flag for positioning Form

      DoResize = False ' Flag for Resize Event

      ' Set up the screen values

      Xtwips = Screen.TwipsPerPixelX

      Ytwips = Screen.TwipsPerPixelY

      Ypixels = Screen.Height / Ytwips ' Y Pixel Resolution

      Xpixels = Screen.Width / Xtwips ' X Pixel Resolution

      ' Determine scaling factors

      ScaleFactorX = (Xpixels / DesignX)

      ScaleFactorY = (Ypixels / DesignY)

      ScaleMode = 1 ' twips

      'Exit Sub ' uncomment to see how Form1 looks without resizing

      Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me

      Label1.Caption = "Current resolution is " & Str$(Xpixels) + _

      " by " + Str$(Ypixels)

      MyForm.Height = Me.Height ' Remember the current size

      MyForm.Width = Me.Width

      End Sub

      Private Sub Form_Resize()

      Dim ScaleFactorX As Single, ScaleFactorY As Single

      If Not DoResize Then ' To avoid infinite loop

      DoResize = True

      Exit Sub

      End If

      RePosForm = False

      ScaleFactorX = Me.Width / MyForm.Width ' How much change?

      ScaleFactorY = Me.Height / MyForm.Height

      Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me

      MyForm.Height = Me.Height ' Remember the current size

      MyForm.Width = Me.Width

      End Sub

      Private Sub Command1_Click()

      Dim ScaleFactorX As Single, ScaleFactorY As Single

      DesignX = Xpixels

      DesignY = Ypixels

      RePosForm = True

      DoResize = False

      ' Set up the screen values

      Xtwips = Screen.TwipsPerPixelX

      Ytwips = Screen.TwipsPerPixelY

      Ypixels = Screen.Height / Ytwips ' Y Pixel Resolution

      Xpixels = Screen.Width / Xtwips ' X Pixel Resolution

      ' Determine scaling factors

      ScaleFactorX = (Xpixels / DesignX)

      ScaleFactorY = (Ypixels / DesignY)

      Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me

      Label1.Caption = "Current resolution is " & Str$(Xpixels) + _

      " by " + Str$(Ypixels)

      MyForm.Height = Me.Height ' Remember the current size

      MyForm.Width = Me.Width

      End Sub

    • 4). Add all the controls you want to test to the form. You can add labels, command buttons and picture boxes. You must do this to test if all elements on your form adjust their size correctly.

    • 5). Go to the "Project" menu and select "Add Module...." Click "Add" to add the new module to your project.

    • 6). Go to the new module and paste the code to automatically adjust the proportions of your form in relation to screen resolution:

      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

      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 ' average scale

      ' Size the Controls for the new resolution

      On Error Resume Next ' for read-only or nonexistent properties

      With MyForm

      For I = 0 To .Count - 1

      If TypeOf .Controls(I) Is ComboBox Then ' cannot change Height

      .Controls(I).Left = .Controls(I).Left * SFX

      .Controls(I).Top = .Controls(I).Top * SFY

      .Controls(I).Width = .Controls(I).Width * SFX

      Else

      .Controls(I).Move .Controls(I).Left * SFX, _

      .Controls(I).Top * SFY, _

      .Controls(I).Width * SFX, _

      .Controls(I).Height * SFY

      End If

      ' Resize and reposition before changing the FontSize

      .Controls(I).FontSize = .Controls(I).FontSize * SFFont

      Next I

      If RePosForm Then

      ' Now size the Form

      .Move .Left * SFX, .Top * SFY, .Width * SFX, .Height * SFY

      End If

      End With

      End Sub

    • 7). Test your new form by running it under different screen resolutions. It should take up the same desktop area and maintain its position.

Source...
Subscribe to our newsletter
Sign up here to get the latest news, updates and special offers delivered directly to your inbox.
You can unsubscribe at any time

Leave A Reply

Your email address will not be published.