GUI/Maximum window dimensions: Difference between revisions

From Rosetta Code
< GUI
Content added Content deleted
Line 46: Line 46:
<lang gambas>
<lang gambas>
PUBLIC SUB Form_Resize()
PUBLIC SUB Form_Resize()
PRINT "The maximum window size that can be used is "; FMain.Width; " x "; FMain.Height
PRINT "The maximum window size that can be used without scrolling is "; FMain.Width; " x "; FMain.Height
END
END



Revision as of 21:31, 27 November 2010

GUI/Maximum window dimensions is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

The task is to determine the maximum height and width of a window that can fit within the physical display area of the screen without srolling. This is effectively the screen size (not the total desktop area, which could be bigger than the screen display area) in pixels minus any adjustments for window decorations and menubars.the idea is to determine the physical display parameters for the maximum height and width of the usable display area in pixels (without scrolling). The values calculated should represent the usable desktop area of a window maximized to fit the the screen.

Considerations

Multiple Monitors

For multiple monitors, the values calculated should represent the size of the usable display area on the monitor which is related to the task (ie the monitor which would display a window if such instructions were given).

Tiling Window Managers

For a tiling window manager, the values calculated should represent the maximum height and width of the display area of the maximum size a window can be created (without scrolling). This would typically be a full screen window (minus any areas occupied by desktop bars), unless the window manager has restrictions that prevents the creation of a full screen window, in which case the values represent the usable area of a window that occupies the maximum permissible window size (without scrolling).

Gambas

Overview

In gambas, the trick to determining the maximum window size that will fit on the screen is to create a form that is maximized and then query its dimensions from within a Form_Resize() event. Note that the form can be invisible during this process, and typically we would use the main modal window (FMain in this example).

Creating the form

From with the project create a form (FMain) with the following properties set:

<lang gambas> FMain.Maximized = True FMain.Visible = False ' The form can be invisible </lang>

From within the projectview, rightclick the FMain form and select Edit class from the contextmenu. This will display a form class file (FMain.class) as follows:

<lang gambas> PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

END </lang>

Adding the form resize event

We can now add a Form_Resize() event to the class file with the necessary code to obtain the screen dimensions as follows:

<lang gambas> PUBLIC SUB Form_Resize()

 PRINT "The maximum window size that can be used without scrolling is "; FMain.Width; " x "; FMain.Height  

END

</lang>

Visual Basic

Method 1

The first method involves querying the screen dimensions and then subtracting pixels used by the frame and desktop bars:

<lang vb>TYPE syswindowstru

 screenheight AS INTEGER
 screenwidth AS INTEGER
 maxheight AS INTEGER
 maxwidth AS INTEGER

END TYPE

DIM syswindow AS syswindowstru

' Determine the height and width of the screen

syswindow.screenwidth = Screen.Width / Screen.TwipsPerPixelX syswindow.screenheight=Screen.Height / Screen.TwipsPerPixelY

' Make adjustments for window decorations and menubars</lang>

Method 2

The alternative method is to create a form that is maximized and then query its dimensions (similar to the method used in gambas).