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.