When a Panorama window opens, it is assigned a unique ID number. It retains this number until it is closed. Once the window is closed, that ID number is not used again during that Panorama session (quitting and relaunching Panorama starts the number sequence over again). The ID number provides a constant way to identify a window that doesn’t rely on the window title, which can change. As long as the window is open, the ID number will never change.

The window ID number is not visible, but it can be accessed with a formula. To find out the ID number of the current window, use the info(“windownumber”) function.

info("windownumber") ☞ 23

To find out the ID number of any open window, use the windowinfo( function with the number option, like this:

windowinfo("Contacts","number") ☞ 14
windowinfo("Contacts:Labels","number") ☞ 15

If the specified window is not currently open, this function will return an error. For example, if the Labels form is not currently open, this function will return an error.

windowinfo("Contacts:Labels","number") ☞ windowinfo( error -- window “Labels” does not exist.

If you would prefer to return zero instead of an error, use the catcherror( function.

catcherror(0, windowinfo("Contacts:Labels","number")) ☞ 0

Window ID Lists

To find out the ID numbers of all open windows, use the info(“windownumbers”) function. This will return a carriage return delimited text array with all of the window numbers. The window numbers are listed in order from the topmost window to the bottom, like this:

5
2
1
4
3

The windowinfo( function allows the target window to be specified with a window ID number instead of a title. So combining these functions, a formula can be built to, for example, display the title of the window below the current window (the 2nd window in the list).

windowinfo(val(nthline(info("windownumbers"),2)),"name") ☞ Contacts:Labels

To find out the ID numbers of all open windows belonging to a specific database, use the listwindownumbers( function. Like the info(“windownumbers”) function, this will return a carriage return delimited text array with the window numbers.

listwindownumber("Contacts")

Other functions for getting lists of window numbers include info(“datasheetwindownumbers”), info(“formwindownumbers”) and info(“procedurewindownumbers”).

Bringing a Window to the Front

To make a window the active window, use the window statement with the ID number of the window you want to bring to the front. Here is a program that opens two databases, then brings the original window back to the top.

let wasWindowNumber = info("windownumber")
opendatabase "Contacts"
opendatabase "Payroll"
window wasWindowNumber

Note: In older versions of Panorama the program above would have been written by saving the window name, and using the window name as the parameter to the window statement. However this wasn’t always 100% reliable because it is possible for multiple windows to be open with the same name. The code above will always come back to the original window, even if there are other windows with the same name.

Here is another example that makes the window immediately below the current window the current window.

window windowinfo(val(nthline(info("windownumbers"),2)),"number")

Window Belonging to a Form or Procedure

The getformoption( and getprocedureoption( functions allow a formula to find out whether a form or procedure is currently open, and if so, what the window ID number is. For example, here is a program that checks to see whether the Label form of the Contacts database is open, and if so, brings it forward.

let wnumber = getformoption("Contacts","Labels","windownumber")
if wnumber<>0
    window wnumber
endif

The code above will open the correct window even if the window has been renamed with the windowname statement.

Clone Form Windows – The openform statement provides the option of opening multiple clone windows of a form. To find out if any clone windows of a form have been open, and what they are, you can use either the clonewindownumbers or clonewindownames option with the getformoption( function. For example, this function will list all of the currently open Panorama Help topics (the help wizard uses clone forms).

getformoption("Panorama Help","Help","clonewindownames")

See the next section for an example using clone window numbers.

Accessing WindowGlobal Variables

The windowglobalvalue( function allows a formula to access variables associated with any open window. Here is a formula that lists the formulas associated with each open Formula Workshop window. The Formula Workshop uses clone windows, which are listed with the getformoption( function. Each formula wizard window stores the formula in a variable named theWizardFormula, so the value of that variable is extracted with the windowglobalvalue( function.

arrayfilter(getformoption("Formula Workshop","Formula","clonewindownumbers"),cr(),
    {windowglobalvalue(val(import()),"theWizardFormula")})

Use the windowinfo( function to get a list of all variables associated with a window.

windowinfo(4,"variables")

See Also


History

VersionStatusNotes
10.2NewNew in this version.