home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / screen / intui110 / tui1.hlp < prev    next >
Encoding:
Text File  |  1992-01-26  |  27.1 KB  |  456 lines

  1. `co(4,7);──────────────────────────── /// Creating dialogs ────────────────────────────`co();
  2.  
  3.  ┌──────────────────────────────────────────────────────────────────────────┐
  4.  │                          `keyword(Introduction,/// Introduction);                                    │
  5.  │                          `keyword(TUI Params,/// TUI Params);                                      │
  6.  │                          `keyword(The Toolbox,/// The Toolbox);                                     │
  7.  │                          `keyword(Modifying the Dialog,/// Modifying the Dialog);                            │
  8.  │                          `keyword(Sizing/Moving the dialog,/// Sizing/Moving the dialog);                        │
  9.  │                          `keyword(1) Adding Text,/// Adding Text);                                  │
  10.  │                          `keyword(2) Adding a Box,/// Adding a Box);                                 │
  11.  │                          `keyword(3) Adding a Button,/// Adding a Button);                              │
  12.  │                          `keyword(4) Adding a Check Box,/// Adding a Check Box);                           │
  13.  │                          `keyword(5) Adding an Icon,/// Adding an Icon);                               │
  14.  │                          `keyword(6) Adding a Slider,/// Adding a Slider);                              │
  15.  │                          `keyword(7) Adding Data Entry Fields,/// Adding Data Entry Fields);                     │
  16.  └──────────────────────────────────────────────────────────────────────────┘
  17.  
  18. `co(15,?);/// Introduction`co();
  19.       In this section, we will create a dialog step by step, describing each
  20.     object and its associated parameters.  This is quite a bit to absorb all
  21.     at once, but it's really quite simple since many objects have so much in
  22.     common.  Be sure to run the tutorials provided; there is no better way to
  23.     learn how to use the TUICP than watching a recorded session.
  24.  
  25.       To create a dialog, we first must start with a new TUI.  Do this by
  26.     selecting "New TUI" in the "Files" menu.  Now select "Add Dialog" from the
  27.     "Dialogs" menu.  We can edit the global TUI parameters if desired by
  28.     choosing the "TUI parameters" under the "Files" menu.
  29.  
  30. `co(15,?);/// TUI Params`co();
  31.       This dialog gives you global control over all dialogs within the current
  32.     TUI.  First we can set the screen rows to 25 or 43/50 (EGA/VGA), and the
  33.     default desktop color.  We can also choose whether to use the UltraWin
  34.     Window Manager.  If you wish to use this elsewhere in your program select
  35.     this item.  Using the Window Manager is recommended as it simplifies
  36.     adding/deleting windows and takes care of all the masking, etc.
  37.   
  38.       When you know your programs will be running on EGA/VGA systems you also
  39.     have control over the video palette.  Clicking on default will reload the
  40.     standard EGA/VGA palette values.  Clicking on custom will pull up a
  41.     palette dialog which allows you to edit each of 16 palette values.  Simply
  42.     click on the desired register, which is represented by one of sixteen
  43.     small boxes at the top of the dialog, and adjust the individual Red,
  44.     Green, and Blue components using the three sliders.  Notice the screen
  45.     change as you adjust the values!
  46.  
  47.       For EGA/VGA systems, you can also select alternate custom fonts.  Two
  48.     font sets can be loaded at once, with the second set activated by using
  49.     the high eight background colors.  To load a different font, simply click
  50.     on the desired set and select the font file you want.  Be prepared, your
  51.     screen will change immediately to the new font.  Loading a special font
  52.     that contains characters other than the standard text into font set one
  53.     will make the TUICP and your dialogs unreadable.  If you need custom icon
  54.     fonts, always load them into the second set.  A number of fonts are
  55.     included with InTUItion, including fat and thin 8x14 and a font containing
  56.     common icons.
  57.  
  58.       We can also set extended colors on EGA/VGA systems.  This allows you to
  59.     use all 16 foreground, and all 16 background colors for a total of 256
  60.     combinations, without the high background colors blinking.  When using two
  61.     font sets, you will typically want extended colors on.  If the default is
  62.     selected, the upper eight background colors will blink.
  63.   
  64.       That's it for the TUI parameters.  Now click on OK and move your mouse
  65.     to the new dialog and press the right button.  A default dialog will
  66.     appear. We can edit the parameters of this new dialog by clicking the
  67.     right button while the mouse is over the dialog. But first let's learn how
  68.     to use the toolbox.
  69.  
  70. `co(15,?);/// The Toolbox`co();
  71.       The TUICP toolbox is a user customizable dialog that holds the various
  72.     objects.  It is quite simply a TUI with only one dialog.  As such you may
  73.     load it into the TUICP and put in your favorite object variations. You may
  74.     even elect to have different toolboxes depending on your current project.
  75.  
  76.       The toolbox is activated by pressing the left mouse button when the
  77.     mouse is outside of the dialog.  Objects are "picked" off of the toolbox
  78.     by moving to them and pressing and holding the left button.  The toolbox
  79.     will disappear and you can then move the object to the desired location.
  80.     If any portion of the object is outside of the dialog it will be
  81.     discarded.  All objects can be moved and sized by grabbing the top row or
  82.     lower-right corner and "dragging" them into place.  To remove an object,
  83.     simply grab it and drag it off of the dialog.
  84.  
  85.       All objects that will be accessed from your program must be named.  This
  86.     name will be used in your programs to identify the object.  Move the mouse
  87.     to the name field and press the left button.  Now enter the desired name.
  88.     As you type, InTUItion converts your characters to upper case.  This
  89.     should prevent any clashes with function or variable names you may create.
  90.  
  91.       All objects have various colors associated with them.  To edit an
  92.     object's color, click on the desired button.  A color dialog box will
  93.     appear.  Move your mouse to the desired color and click the left button.
  94.     You may also use the keypad arrow keys to select a new color.  You can
  95.     click on "Cancel" if you wish to leave the color unchanged.
  96.  
  97. `co(15,?);/// Modifying the Dialog`co();
  98.       First, click the right button on the main dialog box, then name the
  99.     dialog and set its colors as described above.  Now all that's left is
  100.     choosing the border style.  One of four styles are available; None,
  101.     Single, Double, or Solid; choose your favorite.  That's all there is to
  102.     editing the dialog itself.  Let's move on to sizing the dialog.
  103.  
  104. `co(15,?);/// Sizing/Moving the dialog`co();
  105.       To size the dialog, simply "grab" the lower right hand corner by moving
  106.     your mouse to it and pressing and holding down the left button.  Now
  107.     "drag" the dialog to the proper size.  When finished, release the button.
  108.     To move the dialog, we do a similar operation by "grabbing" the top row
  109.     and "dragging" the entire dialog to the desired position.  This is the
  110.     position the dialog will appear on the users screen unless the TUI
  111.     variables are altered by your program by calling position_dialog or
  112.     center_dialog.  So much for this, it's really pretty inTUItive, isn't it?
  113.  
  114. `co(15,?);/// Adding Text`co();
  115.       Text objects are used primarily for labeling other objects within the
  116.     dialog and do not perform any action.  To add a text object, "grab" it off
  117.     of the toolbox and place it in the desired spot.  While the mouse is still
  118.     over the text object, click the right mouse button.  The text dialog will
  119.     appear.  Move the mouse cursor to the text string, click the left button,
  120.     and enter the desired text.  This is the text that will be displayed
  121.     within the text object.  If the object is larger than the text, the text
  122.     will be centered, both vertically and horizontally.  Now set the color for
  123.     the text.  The last remaining item is to set the style to "normal" or
  124.     "shadowed". A shadowed object always has a black shadow to the lower
  125.     right, giving the object a 3D look at the expense of an additional line
  126.     and column.
  127.  
  128. `co(15,?);/// Adding a Box`co();
  129.       Boxes are used to organize the dialog into distinct areas and to control
  130.     radio buttons.  (See Radio buttons for more details). To add a box object,
  131.     "grab" it off of the toolbox and place it in the desired spot.  While the
  132.     mouse is still over the box object, click the right mouse button.  The box
  133.     dialog will appear.  Name the object, and set its color and style.
  134.  
  135.       Ok, now we run into a few new parameters.  Since a box can return
  136.     control when activated, we can define its hot key.  When the user presses
  137.     this key or clicks on the object, the action associated with the item will
  138.     occur. To define the hot key, click on the hot key button and press the
  139.     desired hot key on your keyboard.  Alt keys are quite common and
  140.     recommended.  Keep in mind that the same hot key can be used for each
  141.     dialog as the hot key is only associated with the current dialog.
  142.  
  143.       The final parameter is "Exit On".  The box can return control in one of
  144.     three ways, or anytime the hot key is pressed.
  145.     1) Exit on press   - when the mouse is over the object and a button is
  146.                                              pressed.
  147.     2) Exit on release - when the mouse is over the object and a button is
  148.                                              released.
  149.     3) Exit on over    - anytime the mouse is over the object.         
  150.  
  151.         Exit on press and release are the most commonly used.  Exit on over is
  152.     used where an action must be performed as the user moves his mouse over
  153.     the object.  An example of when you might use this is when you wish to
  154.     "paint" in the dialog box without the user holding down the mouse button.
  155.  
  156. `co(15,?);/// Adding a Button`co();
  157.       Buttons are one of the most commonly used objects.  They are the visual
  158.     equivalent of yesteryear's function keys.  To add a button, grab it off of
  159.     the toolbox and place it in the desired spot.  While the mouse is still
  160.     over the button object, click the right mouse button.  The button dialog
  161.     will appear.  Name the object and choose the button style.
  162.  
  163.       Buttons, like boxes, have a hot key and exit parameters.  They also have
  164.     displayed text like text objects.  Click on the text string and type in
  165.     the desired text.  Additional color control is needed for buttons.  First,
  166.     we set the normal color.  We also have a color associated with the first
  167.     character.  This can be the same as the normal color but is often
  168.     different and commonly associated with the hot key.  The first letter is
  169.     not necessarily the first character in the string, it is the character at
  170.     the position set by "First Index".  An example may help.  Let's say we
  171.     have a button with the text "Cancel".  We first set the hot key to Alt-C.
  172.     Now we set the normal color to lightgray on blue.  To signal the user that
  173.     Alt-C is the hot key, we highlight the C in "Cancel" by setting the first
  174.     position to zero, and the first letter color to yellow on blue. In
  175.     addition to the normal colors, we have a different set of colors when the
  176.     object is selected.  If different from the normal colors, the item will
  177.     change colors when selected.  Furthermore, the user can tab to the button
  178.     but not actually select it.  A third color is used here.  Note that the
  179.     only the text color of the tab attribute is used when the user tabs to the
  180.     button. This allows the user to see if the button is on or off even when
  181.     the tab resides on the button.
  182.  
  183.       Buttons can be normal, radio, or deselectable radio.  Normal buttons are
  184.     the simplest and have no effect on any other objects.  Radio buttons give
  185.     the user one and only one choice.  For instance, the user may have to
  186.     select a disk drive; A, B, C, or D.  One and only one choice must be made.
  187.     A choice of no drive is not allowed.  A deselectable radio button is
  188.     similar but allows a no choice condition to occur.  This might be used to
  189.     choose a second disk drive, which may not exist.
  190.  
  191.       Radio buttons must be grouped in order to work properly.  By default,
  192.     all buttons have the dialog as their parent.  When this is the case, when
  193.     any radio button is selected, all others turn off.  In some cases,
  194.     multiple sets of independent radio buttons are needed in one dialog.  We
  195.     accomplish this by grouping associated buttons within a box.  Simply
  196.     create a box large enough to hold all associated buttons and move the
  197.     buttons inside of the box.  The box becomes the "parent" and the buttons
  198.     the "children".  Now when the box is moved, all buttons within it move. If
  199.     you don't want the box to be visible, simply set its color to the same as
  200.     the background dialog.  Since the box is unlikely to be used on its own,
  201.     you do not need to name it.  Now when you click on a button within this
  202.     box, all other buttons within the box will be turned off, but all other
  203.     buttons in the dialog will be unaffected.
  204.  
  205. `co(15,?);/// Adding a Check Box`co();
  206.       Check boxes are virtually the same as buttons.  The only differences are
  207.     the displayed text and the check mark itself.  The check mark serves as a
  208.     replacement to the selected color.  To set the check mark, click on the
  209.     Mark button and choose the desired character.  Set the check position as
  210.     well.  This is the offset within the displayed string of the check mark.
  211.     Though it is not required, it is a good idea to be consistent with check
  212.     boxes.  For instance, all radio check boxes in InTUItion use ( ) while
  213.     normal check boxes use [ ].  You can put any text before and after the
  214.     check mark, including spaces, allowing a wide variety of styles to be
  215.     used. A check box without a check mark is simply a button!
  216.  
  217. `co(15,?);/// Adding an Icon`co();
  218.       Icons are basically buttons that can contain two-dimensional images of
  219.     any size created with the TUICP's built-in icon editor. (Similar to the
  220.     font editor included in InTUItion).  The image can contain any characters,
  221.     including your own fonts.  Since you can edit your own fonts you can truly
  222.     create two-color graphics icons in mosaic fashion.  A good example might
  223.     be a file selector.  Instead of just displaying drive A,B,C,D etc., you
  224.     can create an icon for a 5 1/4"  & 3 1/2" floppy, a hard disk, and perhaps
  225.     a ram disk. By adding these icons to your dialog, your text based
  226.     application has graphics as well!  Add an icon to your dialog like you
  227.     would any other object and click on the right button to display the
  228.     icon's edit dialog.
  229.  
  230.       Icons have the same parameters as buttons except that instead of
  231.     displaying text, they display one of two images.  Image one is the normal
  232.     image displayed and image two is displayed when the icon is selected.  To
  233.     create the image, click on the image button and the image dialog will
  234.     appear.  Several buttons are available here:                              
  235.  
  236.     Image #1 - selects the normal image.
  237.     Image #2 - selects the image that is displayed when the icon is selected.
  238.     Paint:   - selects a new paint character.
  239.     Clear    - clears the image.
  240.     Copy     - copies the displayed image to the image not displayed.
  241.     Cancel   - ignores the changes and returns to the previous dialog.
  242.     Ok       - accepts the changes and returns to the previous dialog.
  243.  
  244.       If the image is larger than the dialog box, you can scroll the image
  245.     both horizontally and vertically.  If smaller, the editor restricts
  246.     painting to an area equal to the size of the image within your dialog.
  247.  
  248.       To paint, select a character by clicking on the paint button.  Now
  249.     simply move your mouse to the desired character and click the left button.
  250.     This character will now be displayed anytime you click the left button
  251.     while in the icon editor box.  You can also hold down the button and
  252.     "draw" with it to speed up the editing process.  Clicking the left button
  253.     will set the cell to the paint character, while clicking the right button
  254.     will clear the cell.
  255.  
  256.       Since an icon can be as large as the entire dialog, you can be very
  257.     creative here, using custom fonts and colors, to give you text programs a
  258.     unique flair and detail rarely seen in text-mode-only programs.
  259.  
  260. `co(15,?);/// Adding a Slider`co();
  261.       Sliders are used when more data is available than the limited dialog
  262.     size can display.  An editor or file browser is a good example.  Both
  263.     horizontal and vertical sliders can be used. To add a slider, grab it off
  264.     of the toolbox and place it at the desired location.  You can size and
  265.     move the slider anywhere within the dialog.  Note that the slider can only
  266.     be one character tall or wide, depending on whether it's horizontal or
  267.     vertical. When the bounding box is wider than tall, the slider becomes a
  268.     horizontal slider, otherwise it becomes vertical.  No other settings are
  269.     needed. While the mouse is still over the slider object, click the right
  270.     mouse button. The slider dialog will appear. Name the object and choose
  271.     the style.
  272.  
  273.       The slider object has three colors that can be selected; the arrow,
  274.     track, and grab box.  Simply click on the desired one and edit its color.
  275.     There are six characters used to draw a slider that can be customized.
  276.     The right and left arrows for a horizontal slider, the up and down arrows
  277.     for a vertical slider, the slider track or body, and the grab box, which
  278.     indicates the current position.  To change these characters, simply click
  279.     on the desired item and choose a character. 
  280.  
  281.       Sliders can be `co(15,?);Selectable`co();, where they allow the user to control
  282.     and move the slider position by moving the grab box.  If `co(15,?);Selectable`co(); is
  283.     off, then the slider is strictly a visual indicator controlled by the
  284.     program, and the user cannot move the grab box.
  285.  
  286.       `co(15,?);Exit on use`co(); returns control to the program so that you can take
  287.     action anytime the user adjusts the slider.  If this flag is not set, then
  288.     the program should simply read the slider value when needed.  The slider
  289.     object will keep track of the value, adjusting it automatically for you.
  290.     See the InTUItion function library reference for more details.
  291.  
  292.       The slider can be adjusted by the user in one of three ways.  First,
  293.     clicking on the arrows will increment/decrement the slider position by
  294.     one. Second, clicking within the slider track will increment/decrement the
  295.     slider position by the page amount set by your program.  Last, the slider
  296.     can be adjusted by grabbing the grab box and moving it to the desired
  297.     position.  The slider position will be set relative to the grab box
  298.     location.
  299.  
  300. `co(15,?);/// Adding Data Entry Fields`co();
  301.       Data entry fields are perhaps the most complex yet useful objects.  They
  302.     provide a method for the user to input information into your program.
  303.     Let's start by adding a text field to our dialog and clicking the right
  304.     button to display the input parameters.
  305.  
  306.       Many parameters for data entry are the same as with other objects.
  307.     However, there are several additional parameters.  First, we have the
  308.     text, mask, and template parameter strings.  Those of you familiar with
  309.     the UltraWin functions wn_gets and wn_gets_ll will feel right at home
  310.     here. Those of you who are not may want to review these function
  311.     descriptions in the UltraWin function library documentation.  We will show
  312.     several examples here for clarity.  Let's say we need the user to type in
  313.     a date field.  Set the fields as follows.
  314.  
  315. `co(15,?);      Text: ""
  316.       Mask: "__/__/__"
  317.   Template: "## ## ##"`co();
  318.  
  319.       The '#' in the template tells the input routines to only accept digits.
  320.     The spaces in the template tell the input routines to skip over this area
  321.     as the user types.  The mask is "overlayed" onto the screen and gives the
  322.     user an idea of the data form.  The text field content is not important,
  323.     as InTUItion will fill it out for you according to what the user types.
  324.     It typically will start off as a zero-length null-terminated string,
  325.     though you may want to set it to a default string to make it easier on the
  326.     user.
  327.  
  328.       Now when a user enters a date, only digits will be accepted and the /
  329.     will automatically be skipped so that the user can simply enter 010192.
  330.     Furthermore, if it is desired that additional field validation occur as
  331.     the user types, the UltraWin wn_gets_ll function has a "hook" that will
  332.     call your own validation routine for every character entered.  See the
  333.     UltraWin documentation and the STR_DEMO.C source code for more details.
  334.  
  335.       Entry fields can be `co(15,?);tabable`co();, allowing the user to tab to the
  336.     field and press <Enter> to begin input (<Enter> is not required if the
  337.     do_dialog function is called with the DO_INPUT_ADV define).  In addition
  338.     to the TAB key, the keypad arrow keys will cycle forward and backward
  339.     through the tabbed items.  If the item is not set as `co(15,?);tabable`co();, then the
  340.     user must click the mouse on the entry to select it for input.
  341.  
  342.       The `co(15,?);Capitalize`co(); flag can also be selected.  This flag causes
  343.     the first letter of each word to be capitialized as the user types, and is
  344.     useful in an entry field such as a name or title.
  345.  
  346.       The `co(15,?);Type R-to-L`co(); flag causes input to occur right-to-left, rather
  347.     than the usual left-to-right.  This flag is very useful for data entry
  348.     form dialogs that contain price fields.  Please note that when this flag
  349.     is selected that the cursor starts at the right side of the input, and the
  350.     characters are "scooted" over to the left for each valid character
  351.     entered.
  352.  
  353.       The `co(15,?);<CR> on Full`co(); flag is especially useful for fixed-length
  354.     fields. This flag causes the same effect as the user hitting a <CR> when
  355.     the last character of the field is typed, thus eliminating an extra
  356.     keypress.  This feature is particularly useful on a long list of fields of
  357.     the same type. If the flag is off, then the user must press <CR> to accept
  358.     each entry.
  359.  
  360.       The `co(15,?);Clr on Key`co(); flag causes the field to clear when the first
  361.     valid key is pressed.  This is useful when the field contains data the
  362.     user needs to replace.  It is equivalent to the user first pressing CTRL-Y
  363.     and then pressing a valid key.  Like "<CR> on FULL" it saves an extra
  364.     keystroke when set.  If the user first cursors to another part of the
  365.     field the clear is not performed.
  366.  
  367.       `co(15,?);Exit on Use`co(); will return control to your program when the user
  368.      is finished entering data; otherwise, your program can read the string
  369.     value when needed.  "Exit on Use" would be set when the user enters a
  370.     field that immediately requires action by the program.  There are times
  371.     when you might not want it to exit, as when entering a form where you
  372.     don't need the information until all fields are entered and the accept
  373.     button is pressed.
  374.  
  375.         The strip mask flags, `co(15,?);Strip All`co(); and `co(15,?);Strip End`co(); allow control
  376.     over the input string before it is handed back to your program.  If
  377.     neither flag is set, the entire string is handed back. `co(15,?);If Strip All`co(); is
  378.     set, all mask characters are removed, and if `co(15,?);Strip End`co(); is set, only
  379.     the end mask characters are removed.  Here are a few examples of what
  380.     these mean for input in both left-to-right and right-to-left directions.
  381.  
  382.     `co(15,?);Left-to-Right (normal) Entry`co();
  383.     --------------------------------------------------------------------------
  384.     No Strip:  entry: "UltraWin Library___"     return: "UltraWin Library___"
  385.                entry: "08/09/__"                return: "08/09/__"
  386.  
  387.     Strip All: entry: "UltraWin Library___"        return: "UltraWin Library"
  388.                          entry: "08/09/__"                return: "0809"
  389.  
  390.     Strip End: entry: "UltraWin Library___"        return: "UltraWin Library"
  391.                entry: "08/09/__"                return: "08/09"
  392.  
  393.     `co(15,?);Right-to-Left (reverse) Entry`co();
  394.     --------------------------------------------------------------------------
  395.     No Strip:  entry: "___UltraWin Library"     return: "___UltraWin Library"
  396.                entry: "__/08/09"                return: "__/08/09"
  397.  
  398.     Strip All: entry: "___UltraWin Library"     return: "UltraWin Library"
  399.                entry: "__/08/09"                return: "0809"
  400.                entry: "$__99.95"                return: "9995"
  401.  
  402.     Strip End: entry: "___UltraWin Library"     return: "UltraWin Library"
  403.                entry: "__/08/09"                return: "08/09"
  404.                entry: "$__99.95"                return: "99.95"
  405.  
  406.       Please note that `co(15,?);Strip All`co(); gives the same returned string regardless
  407.     of input direction, while `co(15,?);Strip End`co(); will strip the mask from the right
  408.     end of the string for right-to-left, and from the left end of the string
  409.     for left-to-right (the end always being away from the initial cursor
  410.     location for both cases).
  411.  
  412.       Data entry fields have even more control.  Click on the `co(15,?);Special`co();
  413.     button to pull up an additional control dialog. First we set the length of
  414.     input. The input length can be up to 255 characters, even if the display
  415.     field is less.  The input field will scroll as the user types, displaying
  416.     arrows at the start and end of the field to show the user that additional
  417.     data exists before and after the displayed field.  This allows you to
  418.     gather large strings in a small display area.  A full DOS path name is a
  419.     good example. You can specify a length of 12, which will handle any DOS
  420.     file name in the current path, but when the user needs to enter a full
  421.     length path the field will automatically scroll and accept the input.
  422.  
  423.       The validation characters provide a first level of input checking.
  424.     Clicking on one of these will automatically create the mask and template
  425.     so be sure you want to do this before selecting one of these fields.  Here
  426.     is a description of the action each validation character performs:
  427.  
  428.     All       `co(15,?);*`co(); -  Accepts any character.
  429.     Alpha     `co(15,?);a`co(); -  Accepts only alpha characters a-z, A-Z.
  430.     Alnum     `co(15,?);A`co(); -  Accepts any alpha or numeric character a-z 0-9.
  431.     Upper     `co(15,?);u`co(); -  Accepts only uppercase characters, A-Z.
  432.     Lower     `co(15,?);l`co(); -  Accepts only lowercase characters, a-z.
  433.     To Upper  `co(15,?);U`co(); -  Accepts alpha characters and converts to uppercase a-z, A-Z.
  434.     To Lower  `co(15,?);L`co(); -  Accepts alpha characters and converts to lowercase a-z, A-Z.
  435.     Digits    `co(15,?);#`co(); -  Accepts only the digits 0-9.
  436.     Digits+   `co(15,?);9`co(); -  Accepts digits 0-9, '+', '-', '.', 'E', 'e'.
  437.  
  438.       These validation characters can be used in any combination.  Clicking on
  439.     one of these fills the entire template and mask, which can then be edited
  440.     as desired.  For instance, when entering a last name you might want a
  441.     template like "Uaaaaaaaaaa" which converts the first character to
  442.     uppercase and only accepts alpha characters.
  443.  
  444.       Several standard types are included in the dialog for easy use.  They
  445.     are as follows:
  446.  
  447.     Date  -  template = "## ## ##"         mask = "__/__/__"
  448.     Time  -  template = "## ##"            mask = "__:__"
  449.     Phone -  template = " ### ### ####"    mask = "(___)___-____"
  450.     SSN   -  template = "### ## ####"      mask = "___-__-____"
  451.     Money -  template = "#####.##"         mask = "_____.__"
  452.  
  453.       Simply choose one and the mask and template will be automatically filled
  454.     out for you.  In addition the "Money" selection will use the length shown
  455.     at the top of the dialog for the total length of the mask and template.
  456.