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

  • On-demand Event Event Date: May 18, 2015 While the idea of using facial and/or gesture recognition to create a modern, intuitive game seems attractive, some developers may want to leverage Unity 3D as a way to accelerate their development efforts. There are many different ways in which Intel and Unity Technologies have been working together to help speed the development of games with the Intel&reag; RealSense™ SDK (software developer kit). Check out this webcast to join a panel of experts as they …

  • On-Demand eSeminar DevOps and Cloud are all the rage in IT, but the two terms relating process and computing aren't mutually exclusive. Join us to see how your movement into cloud changes the way you develop, deploy, test and manage, and how DevOps can actually be a good thing when coupled with cloud.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date