第 14章 菜单学习要点
1,规则菜单系统
2,创建菜单方法
3,菜单项访问键和快捷键
4,为菜单指定任务
5,定制菜单系统
6,菜单系统的测试第 14章 菜单
14.1 创建菜单系统
14.2 为菜单系统指定任务
14.3 定制与测试菜单系统习题及参考答案第 14章 菜单菜单为用户提供了一个结构化的可访问的途径,以方便用户使用应用程序中的命令和工具 。 适当的规划,设计菜单,可以使应用程序的主要功能得到充分体现,并能使用户更好地使用应用程序 。 在 Visual FoxPro 6.0中,用户不仅可以方便地创建菜单,快捷菜单,单文档界面菜单,菜单项以及子菜单,
还可以为菜单系统指定任务,控制菜单的运行以及定制菜单系统 。
14.1 创建菜单系统用户在应用程序中查找信息时,首先看到的便是菜单 。 若菜单设计美观且功能完备,那么,只要根据菜单的组织形式和内容,用户就可以很好地理解应用程序 。 Visual FoxPro 6.0
提供了,菜单设计器,来创建菜单 。
14.1.1 创建菜单系统的基本步骤创建菜单系统的大量工作是在,菜单设计器,中完成的,用它可创建实际的菜单,子菜单和菜单选项 。 在 Visual FoxPro
中,用户可以通过以下步骤来创建菜单系统:
⑴ 规划与设计菜单系统 。 此时要确定应用程序需要哪些菜单,出现在界面的何处,以及哪几个菜单要有子菜单等 。
⑵ 创建菜单和子菜单 。 使用菜单设计器可以定义菜单标题,
菜单项和子菜单 。
⑶ 按实际要求为菜单系统指定任务 。
⑷ 生成菜单程序 。
⑸ 运行生成的菜单程序,测试菜单系统 。
14.1.2 规划菜单系统应用程序的实用性一定程度上取决于菜单系统的质量 。 在设计菜单系统时,需考虑下列准则:
(1)按照所要执行的任务组织系统,而不是按应用程序的层次组织系统 。
(2)给每个菜单定义一个有意义的标题 。
(3)按照估计的菜单项使用频率,逻辑顺序或字母顺序组织菜单项 。 如不能预计频率,也无法确定逻辑顺序,可以按字母顺序组织菜单项 。
(4)在菜单项的逻辑组之间放置分隔线 。
(5)将菜单的菜单项数目限制在一个屏幕之内 。
14.1.2 规划菜单系统
(6)如果菜单项的数目超过了一屏,则应为其中的一些菜单项创建子菜单 。
(7)为菜单和菜单项设置访问键或键盘快捷键 。 例如,ALT+F可以作为文件菜单的访问键 。
(8)使用能够准确描述菜单项的文字 。 描述菜单项时,要使用日常用语而不用计算机术语 。
(9)在菜单项中混合使用大小写字母 。
规划好菜单系统之后,就可以使用菜单设计器创建菜单,快捷菜单,菜单项,子菜单等 。
14.1.3 快速创建菜单可以使用 Visual FoxPro 6.0提供的,快速菜单,功能,快速创建出与系统菜单完全一样的菜单来 。
[例 14-1] 使用,快速菜单,创建与 Visual FoxPro 6.0系统菜单相同的菜单 。
⑴ 打开,项目管理器,
对话框的,其他,选项卡,选择,菜单,选项,
然后单击,新建,按钮,
打开,新建菜单,对话框 。
图 14-1 打开,新建菜单,对话框
14.1.3 快速创建菜单
⑵ 单击,菜单,按钮,打开,菜单设计器,对话框 。
⑶ 选择,菜单,|“快速菜单,,此时,在,菜单设计器,窗口中自动添加了包含 Visual FoxPro 6.0主菜单的信息 。
图 14-2 使用“快速菜单”创建的菜单系统
14.1.4 自定义菜单项除使用,快速菜单,的菜单命令创建菜单项外,用户也可以自定义菜单项 。 每个菜单项都表示了一个希望执行的 Visual FoxPro命令或过程,菜单项也可以包含子菜单,用以提供其他表单项 。
[例 14-2] 定义一个菜单,其一级菜单包括教师档案管理,教学设备管理,学籍管理和工资管理等菜单项 。
⑴ 打开,菜单设计器,窗口,选择,其他,选项中的,菜单,项,然后单击右边的,新建,按钮 。
14.1.4 自定义菜单项
⑵ 在打开的,新建菜单,对话框中选择,菜单,按钮,弹出,菜单设计器,对话框,如图 14-3所示 。
图 14-3,菜单设计器,对话框各列
14.1.4 自定义菜单项
⑶ 单击,菜单名称,列,在第一行里输入,教师档案管理,,再单击第二行输入,教学设备管理,,继续在下面的几行里输入其他菜单项,结果如图 14-
4所示 。
图 14-4 创建菜单项
⑷ 单击菜单设计器关闭按钮,在弹出的对话框中选择,是,,在打开的,另存为,对话框中输入文件名 e14-2,并单击,保存,按钮保存菜单文件,至此菜单文件已经创建完成 。 保存的菜单文件的扩展名为,mnx。
14.1.5 创建子菜单对于某些菜单项,用户可以创建包含其他菜单项的子菜单 。
[例 14-3]为 [例 14-2]中,教师档案管理,菜单项创建子菜单,包括,调入,,,转出,,,分类统计,和
,查询,4个菜单项 。
⑴ 选择,文件,|“打开,菜单命令,打开 [例 14-2]
所建立的菜单 。
⑵ 单击第一行,教师档案管理,,在,结果,列下拉列表框中选择,子菜单,选项,此时在其右侧将显示,创建,按钮 。 如果已经有了子菜单,则将显示
,编辑,按钮 。
14.1.5 创建子菜单
⑶ 单击,创建,按钮,打开下一级菜单设计窗口,在此可以设计
,教师档案管理,的二级菜单项 。 如图 14-5所示 。
图 14-5 二级菜单项设计窗口
14.1.5 创建子菜单
⑷ 设计完成后,单击,菜单级,下拉列表框,在弹出的列表中选择,菜单栏,项,即可返回图 14-4所示的一级菜单设计窗口 。
图 14-6 选择,菜单级,中的,菜单栏,返回上一级菜单
14.1.5 创建子菜单
⑸ 重复第 ⑵,⑶,⑷ 步骤,创建其他菜单的二级菜单项 。
图 14-7 创建分隔线
⑹ 创建完毕,关闭,菜单设计器,,并保存修改 。
14.1.6 创建快捷菜单在 Visual FoxPro中,用户可以使用,菜单设计器,
创建快捷菜单,这时可以在,项目管理器,对话框的
,其他,选项卡中选择,菜单,选项,然后单击,新建,按钮打开,新建菜单,对话框,并单击,快捷菜单,按钮,此时将打开,快捷菜单设计器,对话框 。
进入,快捷菜单设计器,后,添加菜单项的过程与创建菜单的过程完全相同 。
弹出式菜单 ( 即快捷菜单 ) 用于在应用系统中临时弹出一个菜单,它包括 4种命令,分别用于弹出式菜单定义,选项定义,选项动作定义和弹出式菜单激活 。
14.1.6 创建快捷菜单
1.定义弹出式菜单命令格式:
DEFINE POPUP MenuName
[FROM nRow1,nColumn1][TO nRow2,nColumn2]
[IN[WINDOW]WindowName | IN SCREEN][KEY
KeyLabel]
[MARGIN][MESSAGE
cMessageText][MOVER][MULTISELECT]
[PROMPT FIELD FieldName | PROMPT FILES [LIKE
FileSkeleton] | [PROMPT STRUCTURE]
[SCROLL]
功能:定义弹出式菜单名字及其总体属性 。
14.1.6 创建快捷菜单
2.定义弹出式菜单的菜单项命令格式:
DEFINE BAR nMenuItemNumber1 OF MenuName
PROMPT cMenuItemText[BEFORE nMenuItemNumber2 |
AFTER nMenultemNumber3]
[KEY KeyLabel[,cKeyText]][MESSAGE cMessageText]
[SKIP[FOR lExpression]]
功能:定义弹出式菜单的一个菜单项及其属性 。
14.1.6 创建快捷菜单
3.定义弹出式菜单菜单项的动作命令格式 1:
ON SELECTION BAR nMenuItemNumber OF
MenuName[Command]
功能:指定选择特定菜单项时应执行的命令 。
命令格式 2:
ON SELECTION POPUP MenuName |
ALL[Command]
功能:从特定菜单或所有菜单上选择任一菜单项时,
执行指定的命令 。
14.1.6 创建快捷菜单
4.激活弹出式菜单命令格式:
ACTIVATE POPUP MenuName[AT
nRow,nColumn][BAR
nMenuItermber][NOWAIT][REST]
功能:显示并且激活一个菜单 。
14.1.6 创建快捷菜单
[例 14-4] 使用命令设计一弹出式菜单,支持多重选择菜单项,选择一项后在主屏幕显示相应的月份 。
( a)
14.1.6 创建快捷菜单
( b)
图 14-8 程序执行结果
14.1.6 创建快捷菜单
⑴ 选择,文件,|“新建,菜单命令,在打开的,新建,对话框的,文件类型,选项组中选择,程序,项 。 并单击右侧的,新建文件,按钮,打开标题为,程序 1”的编辑框 。
⑵ 在编辑框中输入程序内容 。
⑶ 单击程序执行按钮,在弹出的对话框中选择,是,按钮,指定程序文件名并保存,此时执行结果即如图 14-8(a),(b)所示 。
14.2 为菜单系统指定任务在创建菜单系统时,必须为菜单和菜单项指定所执行的任务,如显示表单,工具栏以及其他的菜单系统,还应定义访问菜单系统的访问键,键盘快捷键,以及菜单可用的条件 。
14.2.1 指定访问键和快捷键图 14-9 指定访问键
14.2.1 指定访问键和快捷键
[例 14-5]为 [例 14-2]设计的,教师档案管理,菜单项中增加子菜单项,退出,,并为该项设置快捷键 CTRL+Q。
⑴ 打开菜单文件 e14-2.mnx,编辑,教师档案管理,菜单,在其子菜单最后添加,退出,菜单项,如图 14-10所示 。
图 14-10 添加,退出,菜单项
14.2.1 指定访问键和快捷键
⑵ 单击,退出,项中,选项,列的按钮,打开,提示选项,对话框 。
图 14-11 设置快捷键
14.2.1 指定访问键和快捷键
⑶ 单击,键标签,文本框将插入点置于其中,然后按下一对组合键,即可创建快捷键,本例中按下
Ctrl键和字母键 Q。 如果一个菜单项没有快捷键,
Visual FoxPro将在键标签文本框中显示按下要定义的键 。
⑷ 在,键说明,文本框中添加用户希望在菜单项的旁边出现的文本 。 默认情况下,,键说明,重复
,键标签,标记 。
⑸ 设置完毕,单击,确定,按钮,生成菜单程序,
即可运行菜单查看更改结果 。
14.2.2 启用或禁用菜单项在 Visual FoxPro中,可以根据逻辑条件启用或废止菜单及菜单项 。
[例 14-6]继续设计 [例 14-2]中生成的菜单,要求在每月的 1日至 25日之间,教师档案管理,菜单项中的
,分类统计,子菜单无效 。
⑴ 打开菜单文件 e14-2.mnx,单击,教师档案管理,菜单项前的移动按钮来选中菜单项 。 单击,结果,
列的,编辑,按钮,打开二级菜单设计窗口,如图
14-5所示 。
⑵ 单击,分类统计,菜单项,选项,列中的按钮,
打开,提示选项,对话框 。
14.2.2 启用或禁用菜单项
⑶ 单击,跳过,文本框,在 文 本 框 内 输 入 表 达 式,day
(date())<=25”,此表达式将用于确定是否启用菜单或菜单项 。 如果此表达式取值为,假,(.F.),则启用菜单或菜单项,否则废止菜单或菜单项 。
图 14-12 设置表达式
14.2.2 启用或禁用菜单项
⑷ 单击,确定,按钮,返回子菜单设计窗口,选择,菜单,|“生成,
菜单命令重新生成菜单程序 ( 扩展名为,mpr) 。
⑸ 运行菜单 。 打开,教师档案管理,菜单,若当前日期 在当月的 1日至
25日之间,可见,分类统计,菜单项此时变为灰色,处于无效或禁用状态 。
图 14-13 当前无效的打印设备清单菜单项
14.2.3 为菜单指定任务选择一个菜单或菜单项,将执行相应的任务,如显示表单,工具栏或另一个菜单系统等 。 要执行任务,菜单或菜单项就必须执行一个 Visual
FoxPro命令 。 此命令可以是一条语句,也可以是一个过程调用 。
1.执行命令完成某项任务要完成某项任务,可以为菜单或菜单项指定一个命令 。 该命令可以是任何有效的 Visual FoxPro命令,包括对程序和过程的调用,选择,结果,列中的,过程,选项后,即可在出现的文本编辑窗口中编辑所需过程 。
[例 14-7]继续设计 [例 14-2]中生成的菜单,要求选择,教师档案管理,菜单下的,查询,菜单项后,会弹出 teacher表的浏览窗口 。
⑴ 打开菜单文件 e14-2.mnx,选择,教师档案管理,菜单下的,查询,
菜单项 。
14.2.3 为菜单指定任务
⑵ 单击打开,结果,列的下拉列表框,从中选择,命令,选项,此时列表框后会显示文本框 。 在文本框中输入命令,这里输入了 BROWSE。
图 14-14 输入命令
⑶ 设置完毕,重新生成菜单程序,关闭菜单设计器对话框,即可运行菜单 。
14.2.3 为菜单指定任务
2.显示表单和对话框在菜单或菜单项上,使用命令或过程可以显示编译过的表或对话框 。 例如,要显示名为 teacher的表,
可使用下列命令:
DO FORM teacher
3.使用过程完成任务用户可以为菜单或菜单项指定一个过程 。 要为一个菜单项指定过程,可选定菜单项,在结果列的下拉列表框中选择,过程,,然后单击列表框后出现的,创建,按钮,即可在打开的,过程编辑,框中输入要执行的一系列命令 。
14.2.3 为菜单指定任务
4.向菜单系统添加初始化代码
⑴ 打开菜单设计器对话框,选择,显示,|“常规选项,菜单命令,打开,常规选项,对话框 。
⑵ 在,菜单代码,选项组中选择,设置,复选框,然后单击,确定,按钮 。
⑶ 在菜单设计器的,设置,代码窗口中,输入适当的初始化代码 。
⑷ 关闭菜单设计器对话框 。
5.向菜单系统添加清理代码
14.3 定制与测试菜单系统创建一个基本的菜单系统后,还应对它进行定制 。 所谓定制就是添加状态栏信息,定义菜单的位置,或定义默认过程等 。
14.3.1 显示状态栏信息在选择一个菜单或菜单项时,通常希望在状态栏中显示说明该菜单或菜单项的信息 。 这种信息可以帮助用户了解所选菜单的有关情况 。
[例 14-8]继续设计 [例 14-2]中生成的菜单,要求单击,教师档案管理,菜单后,在状态栏里显示,教师档案的插入与删除,权限管理 !,。
⑴ 打开菜单文件 e14-2.mnx,单击,教师档案管理,菜单项所在行的
,选项,按钮,打开,提示选项,对话框 。
⑵ 在,信息,文本框中输入说明信息,并用引号将字符串括起来 。 也可以单击文本框后面的按钮,在打开的,表达式生成器,对话框生成文本字符串 。 如图 14-15所示 。
14.3.1 显示状态栏信息图 14-15 设置菜单说明信息
⑶ 重新生成菜单程序,运行菜单,当单击,教师档案管理,
打开子菜单时,状态栏里会显示前面输入的文本信息 。
14.3.2 定义菜单标题的位置在应用程序中,可以预先设置用户自定义菜单标题的位置 。 在,常规选项,对话框中的,位置,选项组中,通过选择某一个单选按钮,可以设置自定义菜单相对于活动菜单系统的相对位置 。 另外,也可以指定在编辑一个对象时菜单标题的位置 。
如果要为用户自定义的菜单标题指定相对位置,
可打开,菜单设计器,对话框,选择,显示,|“常规选项,菜单命令,打开,常规选项,对话框,然后在
,位置,选项组中选择位置选项,如,替换,,,追加,,,在 … 之 前,或,在 … 之 后,,如图 14-16所示 。
14.3.2 定义菜单标题的位置图 14-16 为用户自定义的菜单标题指定相对位置
14.3.3 为菜单系统定义默认过程用户可以创建一个全局过程,应用于整个菜单系统 。 以后,如果选定一个没有指定过程的菜单,就运行此过程 。 例如,假设用户正在开发一个应用程序,
其中有的菜单还没有设计好子菜单或过程 。 这时,用户可以为这些菜单创建一个临时占位过程,当选定这些菜单时,执行此程序,这样有利于调试 。 比如,用户可以创建一个包含下列函数的通用的临时过程:
MESSAGEBOX(,对不起,此功能尚未定义 !,)
要创建默认过程,只要在,常规选项,对话框的
,过程,文本框中编写或调用过程内容即可 。
14.3.4 测试菜单系统在设计菜单系统时,可以预览整个菜单系统的效果 。 而在生成菜单程序后则可以对系统进行测试和调试 。 若要在设计菜单系统时预览整个系统可在菜单设计器对话框中单击,预览,按钮 。 这时,已经定义的菜单系统将出现在屏幕的最外层 。 此外,,预览,对话框可以显示出菜单系统的文件名 ( 或临时文件的文件名 ) 。 如果选定一个菜单标题或菜单项,则会在
,预览,对话框中显示它,并显示为菜单或菜单项指定的命令 。
要真正看到菜单运行结果,就要将其生成菜单程序,其扩展名为,mpr。
14.3.4 测试菜单系统
[例 14-10] 测试前面创建的菜单系统 。
⑴ 在,菜单设计器,对话框中打开菜单系统 。
⑵ 选择,菜单,|“生成,菜单命令,打开,生成菜单,对话框 。
图 14-17 打开,生成菜单,对话框
14.3.4 测试菜单系统
⑶ 在,生成菜单,对话框的,输出文件,文本框中输入生成的菜单程序的名称,或通过选择对话钮进行输入 。
⑷ 单击,生成,按钮,就会生成扩展名为,mpr的菜单程序文件 。
⑸ 选择,程序,|“运行,菜单命令,运行此程序 。
如果在运行一个应用程序 (.exe)时,它的主程序是一个菜单,且应用程序刚刚显示时,菜单即终止运行,则应在清理代码中包含 READ EVENTS命令,并为退出菜单系统的菜单命令指定 CLEAR命令 。
习题
1.选择题
⑴ 设计菜单要完成的最终操作是 __________。
A.创建主菜单及子菜单 B.指定各菜单任务
C.浏览菜单 D.生成菜单程序
⑵ 为一个表单建立了快捷菜单,要打开这个菜单应当使用
__________。
A.热键 B.快捷键 C.事件 D.菜单
⑶ 将一个预览成功的菜单存盘,再运行该菜单,却不能执行,
这可能是因为 __________。
A.没有放到项目中 B.没有生成
C.要用命令方式 D.要编入程序习题
2.填空题
⑴ 菜单栏是用于放置 __________。
⑵ 菜单标题是 __________。
⑶ 菜单的任务可以是 __________,
__________和 __________。
⑷ 菜单的调用是通过 __________命令完成的 。
参考答案
1,选择题
⑴ D ⑵ C ⑶ B
2,填空题
⑴ 多个菜单项
⑵ 各个菜单的名称
⑶ 子菜单,命令,过程
⑷ DO <菜单名,mpr>