第 9 章 菜单和工具栏
菜单是一个应用系统的功能列表, 它将整个系统的主要功能分类列于应用程序窗口顶 部的菜单栏中,每个菜单项或列出直接完成的功能,或列出包含的若干下级子菜单项。
菜单是用户界面的一个重要组成部分,用户使用应用系统,首先接触的就是菜单,所 以菜单是用户评价应用系统是否方便、简捷、有效的一个重要方面。
除了系统菜单, 在表单中还可以针对某个特定对象定义快捷菜单, 以实现针对当前对 象的操作。
工具栏与菜单具有类似的作用, 工具栏是由直观形象的图标按钮或其他对象组成的条 状工具列表,可泊留在应用程序窗口的上部、窗口的任意四边或浮动于应用程序窗口中, 也可关闭工具栏以节省窗口空间,使用非常灵活。可以把菜单中最常用的一些功能放在 工具栏上,也可以将作用于多个表单的一些通用功能做成工具栏,以减少各个表单中具 有相同功能的重复设计。
对于大型的应用系统, 可以设计几套菜单和多个工具栏, 分别应用于不同的功能模块。
1
9.1
规划与设计菜单 应用程序的每一个部分和每一个功能模块, 在菜单系统中都应有菜单组和菜单项与之
相对应。
因此,菜单是应用程序的组织者、功能模块的管理者,在很大程度上是应
用系统设计的关键。
创建一个菜单系统包括以下步骤: ? 菜单系统规划、 ? 建立菜单、 ? 为菜单指定任务、 ? 生成菜单程序、 ? 运行菜单系统及 ? 测试菜单系统等。
2
9.1.1
规划菜单系统
应用程序的实用性、 友好性在一定程度上取决于菜单系统的质量。 菜单系统的设计方 案与应用程序的总体目标密切相关。在菜单系统规划阶段,首先要明确应用系统的设计 目标是什么,需要用什么样的菜单来组织和管理应用程序中的各个功能模块,这些菜单 出现在系统界面的什么地方,菜单系统中哪些菜单项需要有子菜单等。
设计菜单系统时,应遵循以下原则:
●根据用户所要执行的任务来组织菜单系统, 根据应用
程序中的功能层次来组织菜单 系统。用户只要浏览菜单和菜单项,就能较清晰地了解应用系统的组织和功能情况。因 此,在设计菜单和菜单项之前,设计者必须清楚地掌握用户思考
问题的方式和完成任务 的方法。 ●给每个菜单和菜单项设置一个有意义的标题和简短提示, 以便于用户准确地领会菜 单项和菜单项所对应的操作或功能。这些文字应尽可能地与用户熟知的其他
常用软件一 致,与用户熟知的行业术语一致,而不要使用
计算机术语和一些用户不熟悉的专业术语。 文字应简单、生动。 ●预先估计各菜单项的使用频率, 根据使
用频率、 逻辑顺序或菜单项字母/顷序来组 织菜单项。经验表明,当一个菜单中的菜单项数目在 8 个以上时,按字母顺序排列菜单 特别有效,能提高用户查看菜单项的速度。 ●对同一个菜单中的菜单项进行逻辑分组,并用分组线将各组分开(图 9-1)。在分组 时,按照功能相近、功能顺序原则对菜单项进行分组。 ●把一个菜单中的菜单项数尽可能地控制在一个屏幕所能显示的范围内。 若菜单项的 数目超过一屏,则应为其中的一些菜单项创建子菜单。显然,如果一个菜单中菜单项在 一屏中显示不了,而需要利用滚动条进行滚动处理,则不利于用户直观方便地进行相关 操作。 ●为菜单和菜单项设置访问键或快捷键(图 9—1)。例如,用户按
+键,可以
3
激活 VFP 系统菜单的“工具”菜单(其中“T”称为菜单项“访问键”),按键的同 时依次按键、键可以打开“选项”对话框,按快捷键可以“刷新”等。
以上是进行菜单规划设计时应当遵循的部分原则。 在具体应用中, 要以应用系统的目 标为基础,以用户的需要和实用为依据来进行菜单设计,所创建的菜单应尽可能地与 Windows 菜单具有一致的外观和功能特性。
图 9-1
VFP 的系统菜单(部分)
4
9.1.2
创建菜单概述
菜单有两种:一般菜单和快捷菜单。
“一般菜单”(简称“菜单”)是指位于整个应用系统主窗口或某个表单顶部的菜单, “快捷菜单”是当用户在选定的对象上单击鼠标右键时出现的菜单。
这两种菜单的创建, 虽然均可以采用编程的方式(即采用程序代码)进行, 但利用系统 提供的“菜单设计器”和“快捷菜单设计器”可以更加方便地创建和设计菜单。
与其他设计器打开的方法类似,启动菜单设计器的操作方法也有多种。例如,利用 VFP 系统菜单命令“文件”→“新建” ,或工具栏上的“新建”按钮,或执行命令“CREATE MENU'’ ,或在“项目管理器”窗口中选择“菜单”项后单击“项目管理器”窗口中的“新 建”按钮,均可打开如图 9-2 所示的“新建菜单”对话框。在该对话框中,单击“菜单” 按钮,则打开“菜单设计器” ;单击“快捷菜单”按钮,则打开“快捷菜单设计器” 。
图 9-2
“新建菜单”对话框
5
9.1.3
创建菜单
在“新建菜单”对话框中单击“菜单”按钮,则打开图 9-3 所示的菜单设计器。创建 菜单系统的大量工作可以在“菜单设计器”中完成。
图 9-3
“菜单设计器”对话框
1.创建菜单栏 2.创建子菜单与菜单分组 3.为菜单或菜单项指定任务 4.菜单的提示选项 5.在子菜单中插入系统菜单栏 6.常规选项与菜单选项 7.调试与运行菜单程序
6
1.创
建菜单栏 Windows 环境下的应用程序,其菜单系统通常是一个多级菜单系统,第一级菜单为菜 单栏(横向列于窗口标题栏下),通常以功能进行分类。在打开“菜单设计器”后,在“菜 单名称”列中依次输入各菜单名称,即可创建菜单栏(图 9-4)。
图 9-4
“菜单设计器”使用示例
在“菜单设计器”中,主要包含一个可供用户设计菜单项的列表,列表的每一行对应 于一个菜单项的设置。列表中有以下列表项: ●菜单名称:为菜单项指定标题。如果要为菜单项加入访问键,则在设定为访问键的 字母前面加上一个反斜杠和小于号(\<)。例如,若为菜单项“系统管理”设置访问键 M, 则菜单项的标题输入为“系统管理(\ 7
程”后,单击“创建”按钮,则进入子菜单的设计状态或进入过程编辑窗口。若该菜单 项的子菜单或过程已经创建,则“创建”按钮将会显示为“编辑”按钮。 ●“选项”按钮:打开“提示选项”对话框,可在其中定义快捷键和其他菜单选项。
8
2.创建子菜单与菜单分组 对于任何菜单项, 都可以创建包含其他菜单项的子菜单。 创建子菜单的操作步骤如下: ① 在“菜单名称”列选择要添加子菜单的菜单项(如图 9-4 中的“学生信息”)。 ②在“结果”列选择“子菜单” ,然后单击其右侧的“创建”按钮(如果子菜单已存在, 则该按钮为“编辑”)。 ③依次输入各子菜单项(图 9-5)。
图 9—5
子菜单示例
从上图可以看出,当前处理的菜单级为“学生信息 X” ,即当前设计的菜单为“学生 信息”菜单项的子菜单。利用“菜单级”下拉列表框可以返回到上级菜单的设计状态。 需要注意的是:利用“菜单级”下拉列表框可以返回上级菜单,但只能利用“创建” 或“编辑”按钮进入某菜
单项的子菜单。 上图的菜单项列表中,第 2 行及第 6 行的“菜单名称”为“\-”(斜杠加减号),在菜 单运行时这两行将显示为分组线,即对菜单进行分组。设置分组线的主要目的是为了增 强菜单的可读性。 在创建菜单的过程中,可随时单击“菜单设计器”窗口中的“预览”按钮,以查看当 前所设计菜单的组织与结构。单击“预览”对话框中的“确定”按钮,可结束预览状态。
9
3.为菜单或菜单项指定任务 选择一个菜单项,应能执行相应的任务,如显示表单、工具栏或另一个菜单系统等。 要执行一个任务,菜单项就必须执行一条命令,或执行一个程序(称为过程)。 若要执行的任务可以由一条命令来完成,可以将菜单项的“结果”设置为“命令” , 然后在其右侧的文本框中输入相应的 VFP 命令。它可以是 VFP 中任何有效的命令,包括 对过程或程序的调用(被调用的程序和过程需要给出路径名)。例如,设置图 9-5 中“浏 览学生基本信息” 菜单项的任务为运行表单 xs(假设该表单文件已创建), 则可按如图 9-6 所示进行设置(命令为“DO FORM xs”)。
图 9—6
为菜单项设置命令
若要执行的任务必须由一个程序来完成,则可以将菜单项的“结果”设置为“过程” , 然后单击其右侧的“创建”按钮,再在出现的过程编辑窗口中输入过程代码。例如,将 图 9-5 中“打印学生名册”菜单项的结果设置为“过程” ,单击其右侧的“创建”按钮, 则可打开如图 9-7 所示的过程编辑窗口。
图 9-7
为菜单项设置过程
10
4.菜单的提示选项 对于每个菜单项来说, 单击右侧的 “选项” 按钮(图 9-4), 可打开如图 9-8 所示的 “提 示选项”对话框。通过该对话框可以为菜单设置快捷键、废止菜单或菜单项的条件等。
图 9-8
“提示选项”对话框
●快捷方式:设置菜单的快捷键(如 VFP 系统菜单中“新建”菜单项的快捷键为 +)。快捷键可以是加字母(但不可为+),或加字母,或 Fn 功能键(如)。需要注意的是,在“键标签”文本框中输入要定义的快捷键时,必 须一次性按钮,而不是逐个字母地输入。 ●跳过:设置菜单或菜单项废止(即不可用,外观为灰色)的条件,在文本框中可输入 一个逻辑表达式。当菜单运行时,若逻辑表达式的值为真,则菜单(项)被废止。例如, 某菜单项的“跳过”设置了逻辑表达式“DOW(DATE())=1 OR DOW(DATE())=7” ,则该菜单 项在每周的星期六、星期日被废止;若设置为.T.,则被无条件废止。需要注意的是:预 览菜单时系统不计算逻辑表达式的值,即任何菜单都不会被废止。
11
5.在子菜单中插入系统菜单栏 在子菜单中(
这时菜单级不为“菜单栏”),除了可以自定义菜单项外,还可以把 VFP 系统菜单栏中的菜单项插入到子菜单中(称为“插入栏”)。其步骤为: ①在菜单设计器中进入某子菜单的编辑状态(即这时菜单级不为“菜单栏”); ②将光标移动(定位)到需要插入的位置后,单击菜单设计器中的“插入栏”按钮; ③在出现的“插入系统菜单栏”对话框(图 9-9)中,选择需要插入的系统菜单项,然 后单击“插入”按钮; ④如果插入的菜单项位置不合适,利用“移动”钮将其拖放到合适的位置。 例如,在创建“系统管理”菜单栏(图 9-4)的子菜单时,插入 VFP 系统菜单项“页面 设置”“导人”“导出”和“打开” 、 、 ,其结果如图 9—10 所示。从图 9—10 可以看出,插 入菜单的 “结果” “菜单项” 相应的任务由 VFP 系统菜单的内部名称(如 为 , “_mfi_open” ) 指定,其他菜单属性(如快捷键等)一并继承。
图 9-9
“插入系统菜单栏”对话框
图 9-10
插入系统菜单栏示例
12
6.常规选项与菜单选项 利用“菜单设计器”创建或修改菜单时, “显示”菜单中会出现两个菜单项常规选项 和菜单选项。执行这两个菜单命令可分别打开相应的对话框。 “常规选项”对话框如图 9-11 所示,主要用于为整个菜单系统指定代码和进行一些 相关的设置。
图 9-11
“常规选项”对话框
●过程: 创建菜单过程代码, 在系统运行过程中当用户选择该菜单项时执行该过程代 码。单击对话框中的“编辑”按钮可打开一个编辑窗口,从而可以代替“常规选项”对 话框在其中创建代码。要激活编辑窗口,在“常规选项”对话框中单击“编辑”项,然 后单击“确定”按钮。 ●位置:指定新的菜单系统与已有菜单系统之间的位置关系。 “替换”(默认)则使用 新的菜单系统替换已有的菜单系统; “追加” 则将新菜单系统添加在活动菜单系统的右侧; “在...之前”则将新菜单插入到指定菜单的前面(该选项显示一个包含活动菜单系统名 称的下拉列表); “在?之后”将新菜单插入到指定菜单的后面。 ●菜单代码:选择“设置”或“清理”复选框,均可打开一个编辑窗口,用于编辑“初 始化代码”(Setup Code)或“清理代码”(Leanup Code)。初始化代码是在.MPR 文件中菜
13
单定义代码之前执行的程序部分,可用来打开文件、声明内存变量或者将前一个菜单系 统保存起来供以后使用;清理代码是在.MPR 文件中菜单定义代码之后执行的代码。 ●顶层表单:如果选定,则允许该菜单在顶层表单(SDl)中使用。 “菜单选项” 对话框主要用于为当前指定的菜单级设置过程代码, 即指定从一个菜单 栏中选
择一个指定的菜单标题时要执行的程序代码。例如,在编辑如图 9-5 所示的“学 生信息”子菜单时,执行菜单命令“显示”→“菜单选项” ,将打开如图 9-12 所示的“菜 单选项”对话框。这时设置的过程代码将作用于菜单级“学生信息” ,即选择“学生信息” 子菜单中的任何一个菜单均会执行该过程代码。 需要说明的是,如果某菜单栏或菜单项已设置了相应的任务(子菜单、命令或过程), 则执行相应的任务,忽略在“菜单选项”对话框和“常规选项”中创建的过程代码;若 未设置相应的任务,但在“菜单选项”