827.TXT
=====================================================================
Using MDI Forms
=====================================================================
PRODUCT: R:BASE VERSION: 5.5 or Higher
=====================================================================
CATALOG: General Information ARea : General Information
=====================================================================
R:BASE 5.5 includes new options on the EDIT USING and ENTER USING
commands as well as new commands that enable you to display forms in
a sizeable window instead of full screen. Forms displayed in a
sizeable window are called MDI forms.
The new options of the EDIT USING command are:
ENTER MDI_the MDI keyword replaces the USING keyword. The
MDI keyword tells R:BASE to display the form in a
sizeable window.
EDIT MDI_the MDI keyword replaces the USING keyword. The
MDI keyword tells R:BASE to display the form in a
sizeable window.
AT location_only used with the MDI keyword. Specifies the
initial size of the form window.
AS aliasname_only used with the MDI keyword. Specifies an alias
name that is used with the SETFOCUS command.
CAPTION_specifies the window title when the form displays. Can
be used with MDI forms and with full screen forms.
The new commands used when working with MDI forms are:
SETFOCUS_used to programmatically make the form window the active
window. The form is identified by the alias name specified in
the EDIT/ENTER command.
CLOSEWINDOW_programmatically closes an MDI form. The form is
identified by the alias name specified in the EDIT/ENTER command.
MINIMIZE_minimizes the "R:BASE R> Prompt" window to an icon within
the "R:BASE 5.5" window.
NORMALIZE_normalizes the "R:BASE R> Prompt" window.
MAXIMIZE_maximizes the "R:BASE R> Prompt" window.
MDI forms can only be displayed from the "R:BASE R> Prompt" window or
within a command file or application. Typically you reduce the size
of the "R:BASE R> Prompt" window, call the form, and then make the
form the active window using the SETFOCUS command. For example:
-- set the size of the R> prompt window
MINIMIZE
-- run the form
EDIT MDI formname AS alias1
-- make the form the active window
SETFOCUS alias1 WAIT
How to use each of these commands and options is discussed in more
detail below.
Sizing the R> prompt
Whenever R:BASE executes a RUN command, R:BASE automatically maximizes
the "R:BASE R> Prompt" window. Since MDI forms are typically called
from a command file or application, the "R:BASE R> Prompt" window is
maximized and has focus (i.e. is the active window). The form is
displayed, but behind the maximized "R:BASE R> Prompt" window. In
order to set focus to a form window, the "R:BASE R> Prompt" window
must be minimized or normalized. Three new commands have been added in
R:BASE 5.5 to control the size of the "R:BASE R> Prompt" window:
MINIMIZE, MAXIMIZE, and NORMALIZE. In addition, you can use the
commands TILE and CASCADE to arrange multiple windows on the screen.
When using MDI forms, The "R:BASE R> Prompt" window is typically
minimized using the MINIMIZE command. When the form is closed, the
"R:BASE R> Prompt" window is then maximized using the MAXIMIZE
command. When the "R:BASE R> Prompt" window is minimized, any
commands that display output to the screen do so, but to the
minimized R> prompt_the output is not visible until the "R:BASE R>
Prompt" window is maximized or normalized.
Sizing the Form
The size and location of the window an MDI form displays in are
specified by the four numbers following the keyword AT. The numbers
are in pixels. The first two numbers are the location of the upper
left corner of the form window, measuring from the upper left corner
of the "R:BASE 5.5" window. The next two numbers locate the lower
right corner of the form window. If the window size is smaller than
the defined form size, scroll bars are displayed.
Instead of guessing at the size of the form, define a screen area for
the form in the Form Designer. Choose Layout: Resolution
Guidelines... to define an area on the form. Define a custom area and
specify a size, for example, 400 x 350. The first number is the width
and the second number is the height. R:BASE displays a red line on the
form indicating the size of the screen area. Layout your form objects
within the screen area. Using a screen area, you can easily design
your form to a specific size and have the coordinates for displaying
the form at runtime.
Use the screen area size to specify the window size when running the
MDI form. For example, a form is defined with a screen area of 400 x
350. The lower right coordinates are the screen area size plus plus
20 pixels to remove scroll bars. If the upper left corner is
specified at 10,50, the lower right is (400+20), (350+20) or 420,370.
The command used to display the form in a specific size window
instead of the default window size might look like this:
EDIT MDI formname AT 10,50,420,370
The form window is sizeable and the size can be changed by the user
at runtime using the mouse to expand or contract the window size.
The user can also move the form window by clicking in the title bar
of the window and dragging the form window to a new location.
Using SETFOCUS
The SETFOCUS command switches focus from the "R:BASE R> Prompt"
window to the MDI form window. Even though the form is displayed,
R:BASE automatically returns focus to the "R:BASE R> Prompt" window
unless you use the SETFOCUS command. A command file or application
executes the commands in sequence, one right after the other. The
keyword WAIT on the SETFOCUS command pauses the command file until
the form is closed. If you don't use the keyword WAIT, R:BASE displays
the form, makes the form window the active window, but the command
file or application continues to execute in the background.
To use the SETFOCUS command (and the CLOSEWINDOW command), you must
give the MDI form an alias name using the AS keyword. The alias name
is the name referenced by the SETFOCUS and CLOSEWINDOW commands.
The alias name comes after the form location in the command syntax.
For example:
-- set the size of the R> prompt window
MINIMIZE
-- run the form
EDIT MDI formname AT 10,100,430,470 AS alias1
-- make the form the active window
SETFOCUS alias1 WAIT
You probably won't need to use the CLOSEWINDOW command in your
application. The form window is normally closed by exiting the form.
You can only use CLOSEWINDOW to close a form that does not currently
have focus or is not part of a form-in-a-form procedure.
Form-in-a-Form
Any form can be displayed in an MDI window. MDI forms can also be
used to display a form-in-a-form. When using an MDI form as a
form-in-a-form, the calling form must also be an MDI form. In other
words, a full screen form can only call a full screen form; an MDI
form can only call an MDI form.
When using an MDI form-in-a-form, the EEP that calls the second form
does not need to include a MINIMIZE or NORMALIZE command. The
"R:BASE R> Prompt" window size has already been specified when the
first form was displayed.
You can't close the calling form until the form-in-a-form is closed.
Don't use CLOSEWINDOW in an EEP to close the form-in-a-form, instead
put a close or cancel button on the form. MDI forms are usually
closed just by exiting the form itself.
To specify a location for the form-in-a-form, remember that the
first two numbers of the location are based on the upper left corner
of the screen. Start the form-in-a-form lower and farther to the
right than the calling form. For example, the following commands
might call a form:
MINIMIZE
EDIT MDI form1 AT 10,80,500,400 AS form1 CAPTION+
'Customer Information'
SETFOCUS form1 WAIT
MAXIMIZE
-- more commands here that execute when the form is closed
Form1 has a button, View Transactions, that runs an EEP to call the
second form. the second form displays transactions for the current
customer. The EEP might contain these commands:
EDIT MDI form2 WHERE custid = .vcustid AT 80,140,480,420 +
AS form2 CAPTION 'Customer Transactions'
SETFOCUS form2 WAIT
RETURN
When form2 is exited, the form window is automatically closed and
focus returns to form1. When form1 is exited, it is automatically
closed and the command file that called form1 continues execution.