In earlier versions, the developer can center the window in the primary screen, for example, using the following scripts, however, when the application is moved to the extended screen and when the window is opened, it is still displayed and centered in the primary screen instead of in the extended screen.
Integer li_screenheight
Integer li_screenwidth
Integer li_rc
Integer li_x = 1
Integer li_y = 1
environment lenv_obj
//Check for a window association with this object
If IsNull(this) Or Not IsValid (this) Then
Return -1
End If
// Get environment
If GetEnvironment (lenv_obj) = -1 Then
Return -1
End If
// Determine current screen resolution and validate
li_screenheight = PixelsToUnits (lenv_obj.screenheight, YPixelsToUnits!)
li_screenwidth = PixelsToUnits (lenv_obj.screenwidth, XPixelsToUnits!)
If Not (li_screenheight > 0) or Not (li_screenwidth > 0) Then
Return -1
End If
// Get center points
If li_screenwidth > this.Width Then
li_x = (li_screenwidth / 2) - (this.Width / 2)
End If
If li_screenheight > this.Height Then
li_y = (li_screenheight / 2) - (this.Height / 2)
End If
// Center window
li_rc = this.Move (li_x, li_y)
If li_rc <> 1 Then
Return -1
End If
Return 1Now that the Environment object is added with ScreenX and ScreenY properties to obtain the coordinates of the current screen, the developer can utilize these properties to center the window in the current screen no matter it is the primary screen or the extended screen.
Take the above code for example. To center the window in any screen, you can add the following code in bold, to get the X and Y coordinates of the current screen into the calculation of the center points.
The following code is also demonstrated in the f_center function of the w_splash window in the Example App (which can be accessed from Windows Start | Appeon PowerBuilder [version] | Example App).
Integer li_screenheight
Integer li_screenwidth
Integer li_rc
Integer li_x = 1
Integer li_y = 1
environment lenv_obj
//Check for a window association with this object
If IsNull(this) Or Not IsValid (this) Then
Return -1
End If
// Get environment
If GetEnvironment (lenv_obj) = -1 Then
Return -1
End If
// Determine current screen resolution and validate
li_screenheight = PixelsToUnits (lenv_obj.screenheight, YPixelsToUnits!)
li_screenwidth = PixelsToUnits (lenv_obj.screenwidth, XPixelsToUnits!)
If Not (li_screenheight > 0) or Not (li_screenwidth > 0) Then
Return -1
End If
// Get center points
If li_screenwidth > this.Width Then
li_x = (li_screenwidth / 2) - (this.Width / 2)
End If
If li_screenheight > this.Height Then
li_y = (li_screenheight / 2) - (this.Height / 2)
End If
// Get the X and Y coordinates of the screen where the window will display
int nScreenX, nScreenY
nScreenX = PixelsToUnits ( lenv_obj.screenx, XPixelsToUnits! )
nScreenY = PixelsToUnits ( lenv_obj.screeny, YPixelsToUnits! )
li_x = nScreenX + li_x
li_y = nScreenY + li_y
// Center window
li_rc = this.Move (li_x, li_y)
If li_rc <> 1 Then
Return -1
End If
Return 1


