DOCUMENT #775    
     ===========================================================================
     WINDOWED FORMS
     ===========================================================================
     PRODUCT:  R:BASE                           VERSION:  4.5+ or Higher
     ===========================================================================
     CATALOG:  Forms, Reports & Labels          AREA   :  Forms
     ===========================================================================
 
     Display multiple forms on the same screen using what are called windowed 
     forms. The windowed form pops-up over the main form and then disappears 
     when done. It can be used for display only, for adding data, for editing 
     data. There are just a few simple commands in the EEP that calls the 
     windowed form. The real key is in how the form is designed. You can't just
     call and pop-up any form; the form must be specifically designed to be a 
     windowed form. 
 
     Designing the windowed form
 
     The windowed form is called with the AT option to specify a starting row 
     for the form display. A windowed form does not take up a full screen or 
     page. Locate all the fields at the top of the form definition screen. 
     Generally a windowed form will take up less than 10 lines of the screen. 
     A windowed form does not need to be a single page form, but each page must
     be laid out the same in terms of field placement -- the fields are placed
     at the top of the page and each page uses approximately the same number of
     rows. 
 
     The AT option controls the screen row on which the fields are displayed. 
     The screen column location is determined by where the fields are located 
     on the form. Thus, while fields are located starting on row one of the 
     form definition, they aren't located starting in column one unless you 
     want them to display at the extreme left of the screen when the form is 
     used.
 
     Customize the Form settings of a windowed form as follows:
 
     Set Clear the screen before form use? to No. 
     Set Clear the screen after form use? to Yes. 
     Yes to Do you want to change the menu? for both Add data and Edit data. 
     Select No menus. 
 
     The key to creating a windowed form that looks like a pop-up window is to
     not locate any text on the form. The form contains field locations only. 
     The reason you don't want any text typed on the form is that the text is 
     stored as an 80 character line. When the form is displayed, the entire 80 
     character line is written, including any blank characters. You don't get 
     the windowed effect when you have text located on the form. Region border 
     lines, by the way, are stored as literal text. If your windowed form is a
     region, specify no border. 
 
     You can use variables to place field headings and other textual information 
     on the windowed form. Define a form expression, vtext = 'fieldname 1'', for 
     example. Locate the variable, set the Field settings to make it 
     non-editable, and it displays the defined text when the form is used. 
     Alternatively. the EEP that calls the windowed form can write text to the 
     screen at the appropriate locations. Because the windowed form does not 
     clear the screen before it displays, the text stays on the screen. 
 
     Calling the windowed form
 
     A windowed form is called through an EEP using the form-in-a-form feature of 
     4.5 and 4.5 Plus!. The main or calling form brings up the windowed form with 
     the AT option of either the ENTER USING or EDIT USING command. The AT option 
     specifies the screen row number where the first row of the form layout is 
     displayed. Without the AT option, a form displays starting on row 2 of the 
     screen; row 1 is reserved for the form menu. 
 
     Often the clear screen command, CLS, is used to draw a colored box on the 
     screen to highlight the windowed form display. This makes the form look even 
     more like it is in a window.
 
     Don't put SCREEN RESTORE OFF in the EEP that calls the windowed form. You 
     want the screen to restore to it's original look and display of before 
     the EEP with the windowed form was run. 
 
     An example
     Let's look at the Product form in the Concomp sample database. The form 
     consists of three tables:  Product, Compused and Prodlocation. It displays 
     information about current products, what components are used in the product 
     and all current product locations. Now, suppose, for example, that we don't 
     want the current product locations always displayed on the form. We just 
     want to see the product and its components initially, but display product 
     locations if needed. 
 
     We can call up and display the product locations using a windowed form. It
     requires just a few simple changes.
 
     1. Split the Product form into two separate forms, the original form, still 
     named Product, contains the Product and Compused tables. The second form, a 
     new form named Prodloc, contains just the Prodlocation table. Remove the 
     table Prodlocation from the form (you can do this on the Layout menu). That 
     also removes all the locations for the table. Then just delete all the 
     related text. The fields for the Product and Compused tables can be 
     rearranged as desired. 
 
     2. Define a form expression to place the current model value into a 
     variable, vmodel = model. This will be used by the EEP to call the 
     windowed form to display the locations for that specific model only.
 
     3. Locate a variable, vloc, to control when product locations are displayed. 
     A mouse click or F2 on this field activates the EEP that displays the 
     product location information in the windowed form. Define an expression for 
     the variable to provide instructions, for example, vloc = 'Click for product 
     locations'. Locate the variable wide enough for all the text to display. 
     Customize the Field settings to make sure the variable is editable and to 
 
     add an EEP On exit from field. The EEP calls the windowed form.
 
     The EEP uses new 4.5 Plus! features to check for mouse activity. 
 
     *(PRODLOC.EEP)
     IF (ISTAT('MOUSEROW')) <> 4 THEN
       RETURN
     ENDIF
     IF (LASTKEY(0)) NOT IN ('[F2]','[MOUSEBUTTON1]') THEN
       RETURN
     ELSE
       CLS FROM 15 6 TO 23 78 BLACK
       CLS FROM 14 4 TO 22 76 RED
       WRITE ' Location      Units        Cost     Extended Cost' +
         AT 15, 10 BLACK ON RED
       EDIT USING Prodloc WHERE model = .vmodel AT 15
     ENDIF
     RETURN
 
     First the EEP checks to see if the mouse was last clicked on the form row 
 
     the vloc variable is located on. We only want to call the windowed form if
 
     the mouse is actually clicked in this location. The LASTKEY function tests
 
     for either an F2 keystroke or mouse click. A single mouse click returns 
     MOUSEBUTTON1, a double mouse click returns F2. The CLS commands creates a 
 
     shadow box for display of the windowed form.
 
     The first CLS command clears a block of the screen from row 15, column 6 
     to row 23, column 78 using black as the screen color. The second CLS 
     command overlays the black screen block with a red screen block. The black
 
     block becomes the shadow behind the red block. 
 
     The WRITE command creates headings for the fields and the EDIT USING command 
     displays the windowed form, prodloc, starting at row 15 with the locations
 
     for the particular model number. 
 
     4. Create the windowed form, prodloc.
 
     The form is created with fields located at the very top of the form 
     definition screen. You must do this so the form displays at the correct 
     screen position as specified in the AT portion of the EDIT USING command. 
 
     It is important that the form have no literal text entered on it. It must 
 
     have field locations only. 
 
     The easiest way to place field labels and other text on the windowed form 
 
     is with the WRITE command.  Write the text to the screen at the appropriate 
     locations before calling the form. Because the Form setting Clear screen 
     before form use is set to No in this form, the text written to the screen 
 
     will still display after the form is drawn.
 
     If your windowed form is a region like the Prodloc form, make sure you 
     specify No to the question Do you want a border around the region?. The 
     border around a region is stored as literal text. Set the background color
 
     of the form and the located fields to match the colors specified in the CLS 
     command. All the colors can be set from the Form settings screen.
 
     5. Edit data using the Product form. To see locations for a model, move to
 
     the located variable, vloc, that says  'Click for product locations' and 
     press F2 or use the mouse. The windowed form displays the matching locations 
     for the model. Using Esc exits the windowed form and returns to the Product 
     form.