OVERVIEW.............A overview of the Menu Designer
LOAD MENU............Loading a Menu into the Menu Editor
SAVE MENU............Saving the Menu to a file
DISPLAY OPTIONS......Editing a Menu's Display Options and Characteristics
ITEM EDIT............Editing, Inserting, Adding Menu Items and Sub-Items
ITEM MOVE............Moving Menu Items
INSERT MENU..........Inserting another Menu into a Menu
PROMOTE / DEMOTE.....Promoting or Demoting a Menu item
CUT AND PASTE........Cutting and Pasting Menu Items
EXPORT MENU..........Exporting or Importing a Menu to/from another application
MENU COMPILING.......Compiling menu items for execution
PRINT MENU...........Printing the contents of a menu
RUN MENU.............Running (executing) a menu
TEST MENU............Testing a menu
PERSISTENT MENUS.....Creating Persistent Menu Selections
OVERVIEW
A overview of the Menu Designer
Description:
The Menu Designer is an Editor that is used to create or
modify Menus for storage and/or retrievel to/from the
DCMENU.DBF Menu Dictionary, an Array File or Source Code.
A menu can consist of a top-bar with pull-down sub-menus
and sub-sub-menus or just a pull-down with sub-menus.
A menu created by the Menu Designer is a multi-dimensional
array of related information that is passed to the
DC_MENUMAIN() or DC_MENUPULL() functions for execution.
Menu arrays are saved in a "pre-compiled" format and must
be compiled by the DC_MENUCOMPILE() function before they
can be passed to the appropriate execution function.
This is because the code-blocks in the menu items cannot
be saved to disk. They must be compiled by the macro-
compiler at runtime before they can be evaluated upon
selection of a menu item. A more convenient function named
DC_MENURUN() will accept a menu tag name or a menu array as
an argument then automatically compile and execute the
menu.
The Menu Designer creates menus with the following
features:
* Windows-style CUA compliance
* Grayed (non-selectable) items
* Separation bars
* Sub-Sub menus (no limit)
* Help Prompts for each menu item
* Help Prompts can be fixed on screen or attached to
each pull-down.
* Help Codes for each menu item. For Context-Specific
links to the Help database.
* Heirarchal or Main-Level execution
* Automatic mouse support.
* A variety of Top-bar, Bottom-Bar, Pull-Up, or Pull-Down
options.
* Color configuration
* Access-Control locks on specified menu items to control
user-access.
* Direct execution of code-blocks or return menu code.
* Sticky menu or Menu-Repaint options.
* Conditional compiling of menu items or sub-menus at
runtime based on passed parameters or evaluated code-blocks.
* Menus can "inherit" other menus.
See Also:
dc_menuedit()
MENU EDIT
LOAD MENU
Loading a Menu into the Menu Editor
Description:
A menu can be loaded into the menu editor from a variety
of sources. Menus are saved to the DCMENU.DBF dictionary,
an array file, or source code, so they may be retreived
for editing, cutting and pasting, copying, exporting or for
execution.
MENU DICTIONARY
To load the Editor with a Menu from the menu dictionary,
select (F), (L) and (D) from the pull-down menu then
choose the menu to load from the pick-list. The
pick-list will display all menus that exist in the
DCMENU.DBF file.
ARRAY FILE
To load the Editor with a Menu that was saved to an array
file, select (F), (L) and (A) from the pull-down menu then
enter the name of the *.DCM file to load. Press (CTRL-ENTER)
or double-click the mouse to pop-up a list of all *.DCM
files on the disk.
CODE
To load the Editor with a Menu that was saved to source code,
first you must make sure that the code was compiled and linked
into the .EXEcutable program that the menu designer also
resides. This may be a dCLIP.EXE program or a custom program.
If you are running the menu designer from dCLIP, then you may
exit to the dot-prompt, load the .OBJ file that contains the
source code for the menu with the OBJ command, then re-start
the menu editor. Select (F), (L) and (C) then enter the
name of the function to execute. This function must return
a menu array of the proper type or an error will occur.
NOTE: The recommended function name to use for assigning a
menu to source code is the name of the menu followed
by _M(). For example, the function to call for return-
ing a menu array with the tag name "MAINMENU" is
MAINMENU_M(). The DC_MENURUN() function will look
first to see if the MAINMENU_M() function has been
linked into the program and grab the menu array from
this function, otherwise it will attempt to restore the
menu array from the Menu Dictionary. Restoring from
source code is much faster and more reliable.
See Also:
dc_menuedit()
MENU EDIT
dc_menuload()
SAVE MENU
Saving the Menu to a file
Description:
The menu items that are displayed in the Menu Editor can
be saved to the DCMENU.DBF dictionary, an array file, or
source code, for later retreival by the editor or the
application program.
MENU DICTIONARY
To save the Editor contents to the menu dictionary,
select (F), (S) and (D) from the pull-down menu.
CAUTION: Any menu in the DCMENU.DBF dictionary with the
same name as the menu in the editor will be
overwritten. If you do not want to overwrite an
existing menu, make sure to assign a unique name
by selecting Menu Options.
ARRAY FILE
To save the Editor contents to an array file, select (F), (S)
and (A) from the pull-down menu then enter the name of the
*.DCM file to create.
SOURCE CODE
To save the Editor contents to source code, select (F), (S)
and (S) from the pull-down menu. Enter the name of the
source-code *.PRG file to create and the name of the function
to assign. The source code can be compiled with the Clipper
compiler, linked into an application then the menu can be
loaded an executed by calling the DC_MENURUN() function with
the array passed back from the function.
NOTE: The recommended function name to use for assigning a
menu to source code is the name of the menu followed
by _M(). For example, the function to call for return-
ing a menu array with the tag name "MAINMENU" is
MAINMENU_M(). The DC_MENURUN() function will look
first to see if the MAINMENU_M() function has been
linked into the program and grab the menu array from
this function, otherwise it will attempt to restore the
menu array from the Menu Dictionary. Restoring from
source code is much faster and more reliable.
See Also:
dc_menuedit()
MENU EDIT
dc_menusave()
DISPLAY OPTIONS
Editing a Menu's Display Options and Characteristics
Description:
Each menu created by the menu-designer has a variety of
"options" associated with that menu to establish its
appearance and behavior when it is executed.
To edit the menu options, select (E) then (O) from the
pull-down menu. The following items will be displayed in
a dialogue box for editing:
MENU NAME
Enter a Unique "Tag-Name" of up to 8 characters to assign to
this menu. This name is used to group the items together
in the DCMENU.DBF menu-dictionary, when saving the menu as
an array file with the .DCM extension, or as a reference
to pass to other sub-systems when attaching a menu to a
data-entry screen, browse-screen, pick-list, etc. in a data-
driven application.
DESCRIPTION
Enter a Description of this menu. This description will
appear in pick-lists when choosing a menu from the menu-
dictionary to run, load, delete, etc.
INHERIT MENU
Enter the tag name of any other menu in the menu dictionary
that will be attached to this menu when the menu is compiled.
INSERT?
If a menu is "inherited", then it may be appended to the end
of this menu or inserted in front of this menu when compiled.
If no menu is inherited, then this field is ignored.
STYLE
Enter a single character designating the style of the menu.
A - Standard Top-Bar w/Pull-Downs
B - Boxed Top-Bar w/Pull-Downs
C - Underlined Top-Bar w/Pull-Downs
P - Single Pull-Down (no Top-Bar)
MENU HEIRARCHY
Enter a single character designating the type of structural
heirarchy behavior for this menu when executing the menu
in a program.
M - Main-Level Execution
This Selection will cause other menus called by the start
menu to be "replaced" by the called menu. This means
that any other menu (not sub-menu) called by this menu
will overwrite this menu and the called menu will now
become the main menu. When returning from the called
menu the return will be back to the original program that
invoked the call to the first menu.
S- Sub-Level (Stacked) Execution
This selection will cause other menus called by the start
menu to be "stacked". When returning from a called menu
the user will find himself back in the calling menu. A
return to the original program that invoked the call to
the first menu can be accomplished only by first returning
to the first menu.
MENU SIZE
Enter a single character designating the size of the top bar
menu.
A - Size top-bar to items width
B - Size top-bar to screen width
MENU PULL
Enter a single character designating whether or not you
want pull-downs (D) from a menu bar at the top of the
screen, or pull-ups (U) from a menu bar at the bottom of the
screen.
BAR SPACING
Enter the number of spaces to place between menu items on
the top bar.
EXIT KEYS
Enter a string of characters which define any special keyboard
keys that will function equivalent to pressing the ESCape key
when executing this menu.
START ROW
Enter the start display row to paint the top-bar of this menu.
This parameter is ignored if the menu is attached to another
sub-system window such as the data-entry system or browse
system.
START COLUMN
Enter the start display column to paint the top-bar of this
menu. This parameter is ignored if the menu is attached to
another sub-system window such as the data-entry system or
browse system.
STICKY MENU?
Enter a Y for YES if you want the menu and its selected
pull-down to remain on the screen when a menu item is
selected by the user and an associated code-block is
evaluated. If YES, then after evaluating the code-block the
user will be returned back to the menu.
Enter N for NO if you want the screen restored to its
original state before evaluating the code-block. If NO, then
after evaluating the code-block, the user will be returned to
the program that called the menu.
RE-MENU?
Enter a Y for YES if you want the menu to be repainted and
executed after selecting a menu item and evaluating its
code-block. Enter N for NO if you want the user to be
returned to the calling program after evaluating the selected
code block.
MENU COLORS
Enter a valid color string for the Frame, Hilite Character,
Menu Items, Select Bar, and Grayed items. Press the
(CTRL-ENTER) key or double-click the mouse to pop-up a color
table for choosing a color.
--- BAR-MENU MESSAGE DISPLAY OPTIONS --
Each menu item in the top bar has an optional Help Prompt
associated with that item for displaying more prompt
information when the item is highlighted. The help message
behavior is defined by this set of options.
TYPE
Enter the type of message area you want on the screen.
0 - A single line of text
1 - A boxed area of the screen (fixed in location).
2 - A box that attaches itself directly below the
highlighted top-bar item.
START ROW / HEIGHT
If 0 or 1 was selected as the "type" then this entry will
define the start row of the message area.
If 2 was selected as the "type" then this entry will define
the height (in rows) of the box that will be attached to
the top-bar.
START COLUMN / WIDTH
If 0 or 1 was selected as the "type", then this entry will
define the start column of the message area.
If 2 was selected as the "type", then this entry will define
the width (in columns) of the box that will be attached to
the top-bar.
CENTER MESSAGE / END ROW
If 0 was selected as the "type", then an entry of -1 will
cause the message to be centered within the message display
area.
If 1 was selected as the "type", then this entry will define
the end row of the message box.
END COLUMN
If 0 or 1 was selected as the "type", then this entry will
define the end column of the message box or message line.
--- PULL-DOWN MESSAGE DISPLAY OPTIONS --
Each menu item in a pull-down has an optional Help Prompt
associated with that item for displaying more prompt
information when the item is highlighted. The help message
behavior is defined by this set of options.
TYPE
Enter the type of message area you want on the screen.
0 - A single line of text
1 - A boxed area of the screen (fixed in location).
2 - A box that attaches itself directly below the
pull-down menu selected.
START ROW / HEIGHT
If 0 or 1 was selected as the "type" then this entry will
define the start row of the message area.
If 2 was selected as the "type" then this entry will define
the height (in rows) of the box that will be attached to
the pull-down menu.
START COLUMN / WIDTH
If 0 or 1 was selected as the "type", then this entry will
define the start column of the message area.
If 2 was selected as the "type", then this entry will define
the width (in columns) of the box that will be attached to
the pull-down menu.
CENTER MESSAGE / END ROW
If 0 was selected as the "type", then an entry of -1 will
cause the message to be centered within the message display
area.
If 1 was selected as the "type", then this entry will define
the end row of the message box.
END COLUMN
If 0 or 1 was selected as the "type", then this entry will
define the end column of the message box or message line.
See Also:
dc_menuedit()
MENU EDIT
ITEM EDIT
Editing, Inserting, Adding Menu Items and Sub-Items
Description:
To ADD a menu item at the same level, but following the
highlighted item, select (E) then (A) from the pull-down
menu.
To INSERT a menu item at the same level, but preceding the
highlighted item, select (E) then (I) from the pull-down
menu.
To ADD a sub-menu item at the next lower level, following
the highlighted item, select (E) then (S) from the pull-down
menu. This will create a new sub-menu with this item as
the first item attached to the current item.
To Edit the highlighted item, Press (ENTER) or select (E)
then (E) from the pull-down menu.
An input screen for editing the menu item properties will
appear. Enter the following information:
ITEM TITLE
Enter the Title of the item that will appear in the menu.
This should be a single word for Top-Bar items and may be
multiple words for pull-down items. The First letter of
this item will be high-lighted, unless another character
in the title is preceded by a tilde (~) or an ampersand
(&) character, when will designate the next character as
the Highlight character. The High-lighted character is
also the same as the keyboard character to press to select
the item.
Enter a single @ character in this field if this item is
a separator line between the previous item and the next
item in the menu rather than a selectable item. If an
@ character is entered, then all the below properties,
except "Compile Key" are ignored.
ITEM ENABLE BLOCK
If left empty, the menu item will be displayed in normal
intensity as a selectable item. Enter a valid code-block
to evaluate at runtime if you want this menu item to
be "grayed" (non-selectable) when the code-block returns
a .FALSE. This code-block must always return a logical
value. For example, a menu item titled CREATE AN INDEX
should be "grayed" if there is no database open. This
can be accomplished with the following code-block:
{||!Empty(Alias())}
MESSAGE
Enter a message of up to 250 characters to display in the
message area of the screen when this item is selected.
ACCELERATOR KEY
Enter the INKEY() value of any special key other than the
high-lighted character to press for selecting this item.
EVAL CODE BLOCK OR MENU NAME
Enter a code block to evaluate when this menu item is
selected. If the entry is not placed in {||} code-block
delimeters, then it is assumed that the entry is the
"tag name" of another menu to compile and execute when this
item is selected. This must be a valid tag name in the
DCMENU.DBF dictionary. If this field is left empty, then
no code will be executed when the menu item is selected.
Instead, the contatenated values of all the high-light
characters of the main menu and all sub-menus selected
will be returned by the DC_MENUMAIN() execution function.
HELP CODE
Enter a Help Code of up to 22 characters to pass to the
DC_HELPF1() function if the F1 key is pressed or if the
mouse is clicked in the Help Message area of the screen
when this item is selected. This Help Code is used to
display additional help about this selection based on the
text in the DCHELP.DBF database. If left empty, then
pressing F1 will cause the code set by the DC_HELPCODE()
function to be passed instead.
LOCK CODE
Enter a Lock Code to assign to this item of up to three
characters. If the logged-on user does not have a
specific key or a master-key for this lock, he/she will
not be allowed access. If no user logged onto the
system or this field is left blank then access will not
be limited.
RETURN VALUE
Enter a unique numeric code to be returned by the
DC_MENURETURN() function after this item is selected.
Numeric return codes are the best way of determining
exactly which menu item was selected by the user.
COND. COMPILE KEY or CODE-BLOCK
Enter a Conditional-Compiling key or a code-block to evaluate
when compiling this menu for execution at runtime. The
DC_MENUCOMPILE() function is used to compile the menu array
before passing the compiled-array on to DC_MENUMAIN() for
execution. This function can be given a key to condition-
ally compile this item and exclude it from the menu if the
key does not match. See DC_MENUCOMPILE() for more
information.
See Also:
dc_menuedit()
MENU EDIT
ITEM MOVE
Moving Menu Items
Description:
A menu item or a group of menu items may be moved from
anywhere in a menu to any other location. To move a
single item, select that item, then press select (E) and
(M) from the pull-down menu. Enter the current location
in the item list to relocate the item. The item will be
placed directly in front of the item number entered as
the target.
If the selected item also includes a sub-menu, then all
items in the sub-menu and all of its sub-sub-menus will
also be moved.
See Also:
dc_menuedit()
MENU EDIT
INSERT MENU
Inserting another Menu into a Menu
Description:
Any menu that has been saved to the menu dictionary can
be inserted into the current menu residing in the menu
editor. This feature allows the programmer or system
designer to design separate groups of pull-downs and merge
them into one cohesive system within the menu designer.
To insert a Menu from the menu dictionary, select (F) and
(I) then choose the menu to insert from the menu pick-list.
All the items in the selected menu will be inserted
directly ahead of the currently selected item in the editor.
See Also:
dc_menuedit()
MENU EDIT
PROMOTE / DEMOTE
Promoting or Demoting a Menu item
Description:
"PROMOTING" a menu item refers to moving its level one level
higher from a sub-level to a top-bar item or from a
sub-sub-level to a sub-level item. When an item is
promoted, the item directly below it will become attached
to the promoted item as a new sub-item, unless the item
below it is already at the same level as the new
promotion.
To promote an item, select (E) then (P) from the pull-down
menu. The display will be repainted so you can visually
see the affect of the promotion.
"DEMOTING" a menu item refers to moving its level one level
lower from a top-bar item to a sub-menu item or from a
sub-level to a sub-sub-level item. When an item is
is demoted it will become attached to the item directly
above it as a new sub-menu or as an item in an existing
sub-menu, depending on the level of the preceding item.
To demote an item, select (E) then (D) from the pull-down
menu. The display will be repainted so you can visually
see the affect of the demotion.
See Also:
dc_menuedit()
MENU EDIT
CUT AND PASTE
Cutting and Pasting Menu Items
Description:
A menu item or a group of menu items may be "copied" to
the "menu-clipboard" for later pasting at any new
location in this menu or in any menu loaded into the
menu editor.
To COPY an item TO the CLIPBOARD, select that item, then
press select (E) and (C) from the pull-down menu. The
item and all of it's sub-menus and sub-sub-menus will be
copied to the clipboard.
To PASTE an item FROM the CLIPBOARD, select the item in
the display, then select (E) and (T) from the pull-down
menu. The menu item(s) previously copied to the clipboard
will be pasted into the menu directly ahead of the
selected item.
See Also:
dc_menuedit()
MENU EDIT
EXPORT MENU
Exporting or Importing a Menu to/from another application
Description:
A menu can be EXPORTed to a file named DXMENU.DBF for later
IMPORTing into another application. For example, let's say
you have 3 separate applications, each with its own set of
dCLIP dictionary files. Each application will have its
own DCMENU.DBF Menu dictionary. Menus can be easily
exported to a DXMENU.DBF file. This file has the same
structure as the DCMENU.DBF file so the menu can then be
imported to the DCMENU.DBF file of the target application.
To export a menu, first load the menu into the editor, then
select (F) and (E) from the pull-down menu.
CAUTION: The menu will overwrite any menu in the DXMENU.DBF
file with the same menu name, so make sure to
change the name first under "Menu Options" to a
unique name.
To import a menu, select (F) and (I) from the pull-down menu,
then select the menu to import from the menu pick-list. The
list will include the name and description of all menus in
the DXMENU.DBF menu export file. The current contents of
the editor will be replaced by the imported menu.
See Also:
dc_menuedit()
MENU EDIT
MENU COMPILING
Compiling menu items for execution
Description:
Menu arrays that are saved to disk are always saved as
"pre-compiled" arrays that cannot be passed directly to the
menu execution program. That is because code-blocks in
menu items cannot be saved or restored from disk, but
instead, their "character-string" equivalent is saved.
The code-blocks are then compiled by the DC_MENUCOMPILE()
function which also formats the simple array into a more
complex array of sub-arrays and sub-sub-arrays for faster
performance at execution time.
Menu compiling is performed automatically by the
DC_MENURUN() function, therefore it is an operation that
is normally transparent to the user and the programmer.
CONDITIONAL COMPILING
A sub-set of a menu system may be compiled into an
executable menu at runtime by a technique known as
"conditional-compiling".
The main advantage of conditional-compiling is that it
reduces unneccessary redunancy when designing menus that
are greatly similar but may be slightly different. The
menu items that are different can be assigned compile-key
values. Eliminating redundancy provides the advantages of
keeping the data-dictionaries smaller in size and also
reducing the possibility of ambiguous menus.
Each menu item may be assigned a COMPILE KEY or a COMPILE
CODE-BLOCK.
-- Conditional Compiling using a Compile *KEY* --
To compile conditional items before executing a menu you
must pass a "compile-key-list" as the second parameter to
the DC_MENURUN() function.
Example: DC_MENURUN( MYMENU_M(), "210,320,5**" )
Conditional compiling allows the programmer or application
designer to build a complex menu system and assign "keys"
to each conditional item. Items which have not been assigned
a key will always be compiled into the executable menu.
Items which have been assigned a key value of up to three
(3) characters, will be compiled into the executable menu
only if the key assigned to that item matches one of the
keys in the compile-key-list. The key list may include
wild-card characters (*).
-- Conditional compiling using a Code-Block ---
When menu items are assigned a compile code-block, the code-
block is evaluated at the time the menu is compiled. If the
code block returns a .TRUE. then the menu and it's associated
sub-menus are compiled into the final array. If the code-
block returns are .FALSE., then the menu item and it's sub-
items are treated as though they don't exist.
See Also:
dc_menuedit()
MENU EDIT
dc_menucompile()
PRINT MENU
Printing the contents of a menu
Description:
The contents of a menu can be sent to an ASCII text file
or the Printer. The complete details of every menu item
and all the menu options will be printed or sent to a
file.
Select (O) and (P) from the pull-down menu to print the
contents of the current menu in the editor. A choice
menu will appear with the option of sending the output
to the printer or an ASCII file.
See Also:
dc_menuedit()
MENU EDIT
RUN MENU
Running (executing) a menu
Description:
The purpose of a menu designer, of course, is to make it
simple to create menus that can be used in either a
coded or a data-driven application. After creating and
saving menus, they can be inserted into an application
or run from dCLIP in a variety of ways.
RUNNING A MENU FROM THE DOT PROMPT OR FROM APPLICATION CODE
1. Use the command MENU (cMenuName) or the function
DC_MENURUN( (cMenuName) ) to execute a menu that was
saved in the DCMENU.DBF dictionary.
2. Use the function DC_MENURUN() to execute a menu that
was saved to source code. For example, if you created
a function named MYMENU_M() in a source code file named
MYMENU.PRG, then make sure that you have compiled the
program and linked it into the dCLIP.EXE engine or your
own application either will a "real" or "dynamic link".
Then run the menu as follows:
DC_MENURUN( MyMenu_M() )
3. Use the functions DC_MENURUN() and DC_ARESTORE() to
execute a menu that was saved to an array file. For
example if you created an array file named MYMENU.DCM,
you can run the menu as follows:
DC_MENURUN( DC_ARESTORE( "MYMENU.DCM" ) )
NOTE: The DC_MENURUN() function will accept a character
string (menu tag name) or an array (pre-compiled menu
array) and then will compile it and pass it on to
DC_MENUMAIN() or DC_MENUPULL() for execution.
RUNNING A MENU FROM ANOTHER MENU
If you want to run an other menu from within a menu, you
must place the appropriate function within the code-block
that will be evaluated when the menu item is selected.
Examples:
1. Loading and running a menu in the menu dictionary.
{|| DC_MENURUN( "MYMENU" ) }
2. Loading and running a menu from an array file.
{|| DC_MENURUN( DC_ARESTORE("MYMENU.DCM") ) }
3. Loading and running a menu compiled into code and linked
in the application.
{|| DC_MENURUN( MYMENU_M() ) }
RUNNING A MENU WITH CONDITIONAL-COMPILING
A sub-set of a menu system may be compiled into an
executable menu at runtime by a technique known as
conditional-compiling. To accomplish this, you must pass
a "compile-key" as the second parameter to the DC_MENURUN()
function.
Example:
DC_MENURUN( MYMENU_M(), "201" )
See Also:
dc_menuedit()
MENU EDIT
dc_menurun()
MENU RUN
TEST MENU
Testing a menu
Description:
The contents of the current menu in the editor can be
tested, by compiling it and then sending it to the menu
execution function. This feature will give a WYSIWIG
picture of the actual menu. In fact, the menu that is
compiled is identical to that which is used in the
application, so any code-block in an item selected from
the test menu will also be immediately evaluated. This
is a handy feature, but it also presents the possibility
of creating errors if the code-block being evaluated
calls functions not linked into the same program as the
menu designer. No such errors will be catastrophic
however, because the error handler will return control
back to the menu editor.
To test the current menu, select (O) and (T) from the
pull-down menu.
See Also:
dc_menuedit()
MENU EDIT
PERSISTENT MENUS
Creating Persistent Menu Selections
Description:
Menus with an ID on menus and menu selections will automatically
support a "PERSITENT MENU SELECTION" feature. This feature
provides the ability to store "DEFAULT" menu selections menus.
The user should have the ability to press a hot-key when high-
lighted on a menu item and this action will automatically flag
this selection as the "default".
a. A Unique 8-digit MENU_ID must be assigned to every menu item in
the DCMENU.DBF menu dictionary.
b. A Database name DCMENUID.DBF/.NTX is checked for a link between
a Parent ID and a Child ID and this link establishes the default
value. This database does not need to be created or maintained.
It is automatically created if it does not exist.
c. To "store" the default value for a pull-down menu, simply press
(Ctrl-U) when the menu selection is highlighted. To change the
storage hot-key use the function DC_MenuIDKey((nInkeyVal)).
Each user is allowed to have his/her own menu defaults as they
are stored under the user's ID. See DC_UserInfo().
The menu designer automatically assigns unique menu ID codes to
each menu item to enable this feature.