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

  • Java developers know that testing code changes can be a huge pain, and waiting for an application to redeploy after a code fix can take an eternity. Wouldn't it be great if you could see your code changes immediately, fine-tune, debug, explore and deploy code without waiting for ages? In this white paper, find out how that's possible with a Java plugin that drastically changes the way you develop, test and run Java applications. Discover the advantages of this plugin, and the changes you can expect to see …

  • Savvy enterprises are discovering that the cloud holds the power to transform IT processes and support business objectives. IT departments can use the cloud to redefine the continuum of development and operations—a process that is becoming known as DevOps. Download the Executive Brief DevOps: Why IT Operations Managers Should Care About the Cloud—prepared by Frost & Sullivan and sponsored by IBM—to learn how IBM SmartCloud Application services provide a robust platform that streamlines …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds