Centering A Form - Using Available Desktop Space

Almost everyone who has programmed in VB for even a short period of time, has had to display a form centered on a screen.

A variety of ways exist for doing so, but most ignore some aspects of the environment such as the taskbar, the office launchbar, and even the app's own titlebar.

The following function takes all of this into account to center a form perfectly with the client area.


private Declare Function GetSystemMetrics Lib "user32" _
    (byval nIndex as Long) as Long 
private Declare Function GetWindowLong Lib "user32" alias _
    "GetWindowLongA" (byval hwnd as Long, _
    byval nIndex as Long) as Long   

private Const SM_CXFULLSCREEN = 16 
private Const SM_CYFULLSCREEN = 17 
private Const SM_CYCAPTION = 4  

public Sub CenterForm(Frm as Form)  

    Dim Left, Top as Integer  

    Left = Screen.TwipsPerPixelX * _
      GetSystemMetrics(SM_CXFULLSCREEN) / 2 - Frm.Width / 2 
    Top = Screen.TwipsPerPixelY * _
      (GetSystemMetrics(SM_CYFULLSCREEN) + _
       GetSystemMetrics(SM_CYCAPTION)) / 2 - Frm.Height / 2  

    Frm.Move Left, Top

End Sub  


Comments

  • i know a way quicker way to centre a form

    Posted by 02goodacrel on 12/04/2005 10:04am

    Form1.Left = ((Screen.Width / 2) - (Form1.Width / 2)) Form1.Top = ((Screen.Height / 2) - (Form1.Height / 2))

    Reply
  • Duh - you're all missing the point.

    Posted by Legacy on 11/22/2002 12:00am

    Originally posted by: Steve

    Yes, well done guys. We all know about the screen object. But what my friends in the above posts have failed to spot is that usign the Screen object does not take into account the TaskBar or any other docked windows (like the MS Office Bar or the SmartSuite bar).

    Using the API as described in the original article *IS THE CORRECT WAY* of centering a form in the CLIENT AREA.

    Nuff sed.

    Reply
  • Something Better

    Posted by Legacy on 03/18/2002 12:00am

    Originally posted by: Nesta

    This you can add right into the Form Load Sub..

    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2

    One line for all your form centering needs.

    Nesta28
    GHB Studios

    Reply
  • COOL

    Posted by Legacy on 08/02/2001 12:00am

    Originally posted by: Benjam�n Mariscal

    It's cool

    Reply
  • Centering a form on the given screen without using API

    Posted by Legacy on 03/30/2000 12:00am

    Originally posted by: Joseba del Arco

    I have found an easiest way to center a form on the screen without using API functions.
    
    

    This is:

    Sub CenterForm(Frm as Form)
    Frm.Move (Screen.Width - Frm.Width)\2, (Screen.Height - Frm.Height)\2
    End Sub

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • On-demand Event Event Date: October 29, 2014 It's well understood how critical version control is for code. However, its importance to DevOps isn't always recognized. The 2014 DevOps Survey of Practice shows that one of the key predictors of DevOps success is putting all production environment artifacts into version control. In this webcast, Gene Kim discusses these survey findings and shares woeful tales of artifact management gone wrong! Gene also shares examples of how high-performing DevOps …

Most Popular Programming Stories

More for Developers

RSS Feeds