第 7 章 菜单与工具栏
菜单和工具栏在应用程序中是必不可少的,开发者通过菜单将应用程序的功
能、内容有条理的组织起来展现给用户使用,开发者通过工具栏为用户提供快捷、
简单、方便的使用工具。菜单和工具栏是应用程序与用户最直接交互的界面。
VFP 为开发者提供了自定义菜单和工具栏的功能,从而使开发者能根据需要设计
符合实际应用的菜单和工具栏。
7.1 建立菜单
在应用程序中一般采用两种菜单,一种为下拉式菜单,另一种为快捷菜单。
无论创建哪种菜单,首先都要根据需要对应用程序的菜单进行规划与设计,然后
才是创建。
7.1.1 规划菜单
需要规划内容如下所示:
1.按用户的要求规划菜单;
2.确定需要哪些菜单,有多少个菜单及子菜单;
3.菜单应放在界面的哪个位置;
4.确定每个菜单的标题和完成的任务;
5.将菜单上的菜单项限制在一个屏幕内;
6.确定哪些菜单项经常被使用需要设置热键和快捷键。
7.1.2 建立下拉式菜单
下拉式菜单是一个应用程序的总体的菜单。
1.下拉式菜单的组成
下拉式菜单是由条形菜单和弹出式菜单组成。VFP 菜单就是一个下拉式菜
单。在 VFP 主界面窗口中,主菜单就是一个条形菜单,当在主菜单栏选中一菜
单项时,在该菜单项下方出现的菜单就是弹出式菜单。VFP 使用可视化设计工具
——菜单设计器来创建菜单。
2.建立下拉式菜单
图 7.1 新建菜单对话框
建立下拉式菜单的基础步骤包括:打开菜单设计器,在菜单设计器中进行菜
单定义,保存菜单,生成菜单程序,执行菜单程序。
(1)打开菜单设计器
文件菜单→新建命令或常用工具栏中的新建按钮→在新建对话框中选定菜
单选项按钮→新建文件,打开新建菜单对话框如图 7.1 所示→选定菜单按钮,打
开菜单设计器如图 7.2 所示。此时主菜单中增加了一个菜单选项,原来的显示菜
单的选项也发生了变化。下文逐一介绍。
图 7.2 菜单设计器
(2)菜单设计器窗口
在菜单设计器中有菜单名称列、结果列、选项列、菜单级组合框及四个菜单
项按钮,下面分别说明:
1)菜单名称列
菜单名称列用来指定菜单项的名称。若菜单项需要设置热键,则在名称后加
(\<字符),如文件(\
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
框,内有命令、填充名称、子菜单、过程 4 个选项,
默认值为子菜单。
①命令
若选此项,右边会出现一个文本框,可直接输入一个命令,当执行菜单选此
菜单项时,就执行该命令。
②填充名称
若选此项,右侧出现一个文本框,可输入菜单项的内部名或序号在子菜单中
填充名称用菜单项代替。
③子菜单
若选此项,右侧出现创建按钮,单击该按钮可建立子菜单,一旦建立了子菜
单,创建按钮就变为编辑按钮,用来修改子菜单。
④过程
若选此项,右侧出现创建按钮,单击此按钮打开过程编辑窗口供用户编辑该
菜单项被选中时要执行的过程代码。
图 7.3 提示选项对话框
注意:结果列中的命令选项只能输入一条命令,而过程中可以输入多条命令。
3)选项列
每个菜单行的选项列都有一个无符号按钮,单击该按钮出现如图 7.3 所示的
提示选项对话框。供用户定义该菜单项的附加属性,一旦定义了这些属性,按钮
上便会出现 Ⅴ 这个符号。
下面说明提示选项对话框的功能:
①快捷方式
用于定义快捷键。在键标签文本框中按一下组合键,如同时按 Ctrl+X,此
时在键标签文本框、键说明文本框中自动填入 Ctrl+X 字符串,若要取消已定义
的快捷键,只需在键标签文本框中按空格键即可。
②位置
用于显示菜单位置
③跳过
定义菜单项跳过的条件。指定一个表达式,若表达式值为真时,此菜单项为
灰色不可用。
④信息
定义菜单项的说明信息,此信息必须用字符定界符括起来,它显示在系统的
状态栏中。
⑤主菜单名
用于指定菜单项的内容名或序号。如果不指定系统会自动填入。
⑥备注
用于输入用户自己的备注,不影响程序代码的生成。
4)菜单级组合框
用于显示当前设计的菜单级。它是一个下拉列表框,内含该菜单中所有菜单
级名,通过选择菜单级名可直接进入所选菜单级。如在设计子菜单时想返回最上
层菜单级时,可选名为菜单栏的第一层菜单级。
5)插入按钮
单击此按钮,是在当前菜单行之前插入一个新的菜单项行。
6)插入栏按钮
图 7.4 插入系统菜单对话框
单击此按钮,打开插入系统菜单栏对话框,如图 7.4 所示,在插入系统菜单
栏对话框中,选择需要的项目,然后按插入按钮即可。
7)删除按钮
单击此按钮,删除当前菜单项行。
8)预览按钮
单击此按钮,可预览菜单效果。
(3)显示菜单
在菜单设计器打开的基础上,显示菜单增加了常规选项和菜单选项两个命
令。
1)常规选项
选定显示菜单的常规选项命令,将打开常规选项对话框,如图 7.5 所示。它
可以对菜单的总体属性进行定义。
①过程编辑框,用于对条形菜单指定一个过程。当条形菜单中的某一个菜单
项没有规定具体的动作,当选择这个菜单项时,将执行此过程。
②替换选项,是默认选项按钮,选定它表示用户菜单替换系统菜单。
③追加选项,选定它将用户菜单添加到系统菜单的右侧。
④在…之前选项,选定它将用户菜单插在系统菜单某菜单项(即条形菜单中
菜单项)之前。
⑤ 在…之后选项,选定它将用户菜单插在系统菜单某菜单项之后。
⑥设置复选框,选定它可打开一个设置编辑器,单击确定按钮可在编辑窗中
输入初始化代码,此代码在菜单产生之前执行。
⑦清理复选框,选定它打开清理编辑窗口,单击确定按钮可在编辑器中输入
清理代码,此代码在菜单显示出来后执行。
⑧ 顶层表单复选框,选定它用于此次菜单出现在顶层表单中。
图 7.5 常规选项对话框 图 7.6 菜单选项对话框
2)菜单选项
选定显示菜单的菜单选项命令,打开菜单选项对话框如图 7.6 所示。它用于
定义弹出式菜单公共过程代码,当弹出式菜单某个菜单项没有具体动作时,将执
行这段代码。
(4)正确退出菜单的常用命令
1)恢复 VFP 主窗口命令
格式:MODIFY WINDOW SCREEN
功能:恢复 VFP 主窗口在它启动时的配置。
2)恢复 VFP 系统菜单命令
格式:SET SYSMENU TO DEFAULT
功能:恢复 VFP 系统菜单。
3)激活命令窗口命令
格式:ACTIVATE WINDOW COMMAND
功能:激活命令窗口。
(5)生成菜单程序
图 7.7 菜单生成对话框
选定“菜单”菜单的生成命令,打开确认对话框→是,打开另存为对话框→
在保存菜单为文本框中输入菜单名,如菜单 1→保存,打开生成菜单对话框如图
7.7 所示→生成。此时生成一个菜单 1.mpr 文件。
(6)运行菜单
程序菜单 → 运行命令,打开运行对话框如图 7.8 所示→在文件列表中选菜
单 1.mpr → 运行即可。
图 7.8 运行对话框
例 7.1 设计一个下拉菜单,要求条形菜单中的菜单项有数据查询(C),数据
维护(W),输出报表(B),退出(R),数据查询内部名为a1,数据维护内部名为a2。
数据查询的弹出式菜单有按学号查询,按姓名查询,它们的快捷键分别为Ctrl+H,
Ctrl+X。数据维护的弹出式菜单有维护学生表,维护学生成绩表,快捷键分别为
Ctrl+E,Ctrl+F。输出报表无弹出式菜单。
操作步骤如下:
1)打开菜单设计器
文件菜单→新建命令,打开新建对话框→选菜单→新建文件→菜单,打开
菜单设计器如图 7.2 所示,
2)定义条形菜单如图 7.9 所示。
图 7.9 条形菜单
3)为退出菜单项定义过程,单击结果列上的创建,打开过程编辑器输入如下
代码:
MODI WINDOW SCREEN
SET SYSMENU TO DEFAULT
ACTIVE WINDOW COMMAND
然后关闭。
4)建立数据查询弹出式菜单。单击数据查询菜单项结果列上的创建按钮,菜
单设计器进入子菜单页,然后在第一行菜单名称列中输入按学号查询,在结果列
中选命令,在右侧框输入命令为:messagebox(“欢迎进入学号查询”),在第二行
菜单名称列输入按姓名查询,在结果列中选命令,在右侧框输入命令为:
messagebox(“欢迎进入姓名查询”),如图 7.10 所示。
图 7.10 数据查询子菜单
5)为学号查询设置快捷键,单击按学号查询行上的选项列,打开提示选项对
话框,在键标签文本框中按 Ctrl+H→确定。用同样方法可为其他菜单项设置快捷
键。
6)为数据查询弹出菜单设内部名。在此时子菜单页状态下选显示菜单→菜单
选项,打开菜单选项对话框→在名称文本框中输入 a1,如图 7.11 所示→确定。
用同样方法为其他子菜单设内部名。
7)在菜单级下拉列表框中选菜单栏返回到主菜单页。
8)建立数据维护子菜单,如图 7.12 所示,并对各子菜单项设快捷键。
9)对数据维护子菜单设之内部名与默认过程。显示菜单→菜单选项,打开菜
单选项对话框→在名称文本框中输入 a2→在过程文本框中输入 messagebox(“你
已经进入了数据维护子菜单”),然后按确定。
10)在菜单级下拉列表框中选菜单栏返回主菜单页。
图 7.11 设置数据查询子菜单内部名
图 7.12 数据维护子菜单
11)为条形菜单项设置默认过程。选显示菜单→常规选项,打开常规选项对
话框→在过程编辑框中输入如下命令:
messagebox(“你已经进入了学生信息管理系统”),然后按确定。
12)预览菜单效果。在菜单设计器中单击预览按钮即可。单击预览对话框中
的确定结束预览。
13)生成菜单程序。选菜单→生成,打开生成确认对话框→是,打开另存为
对话框→在保存菜单为文本框中输入 P7_1→保存,打开生成菜单对话框→生成。
14)执行菜单。选程序菜单→运行,打开运行对话框→在运行对话框的文件
列表中选 P7_1.mpr 文件→运行。
本题为了简单起见用菜单项只是调用对话框,如果想让菜单调用表单,可在
菜单项的命令与过程中加入 DO FORM <表单名>命令,即执行表单命令。
(7)将菜单放置到顶层表单中
需要作如下几步:
1)在定义菜单时,将常规选项对话框中的顶层表单复选框选中。
2)创建一个顶层表单,即将表单的 show window 属性设为 2。
3)在表单的 Init 事件中加入如下运行菜单的命令。
格式:DO <菜单名>.mpr WITH this, .T.
例 7.2 设计一个顶层菜单。表单中有”欢迎你进入学生信息管理系统”,再设
计一个学生信息管理的菜单,将此菜单放入顶层表单中,界面如图 7.13 所示。
图 7.13 例 7.2 界面
为了简单起见我们可将例 7.1 中的 P7_1.MNX 菜单打开,选文件菜单→另存
为,打开另存为对话框→在另存菜单为文本框中输入 P7_22→保存。此举目的在
于将 P7_1 菜单再另存一份为 P7_22,这样修改一下 P7_22 就成为此题要求的菜
单了。
操作步骤如下:
1)对 P7_22 进行修改。
①选显示→常规选项,打开常规选项对话框→选中顶层表单→确定。
②在菜单设计起主菜单页的退出菜单项行,单击结果列的编辑按钮,打开过
程编辑器 →在最后添加如下命令:clear all ,然后关闭过程编辑器。
③生成菜单程序。
④关闭菜单设计器。
2)建立顶层菜单
①打开表单设计器,在 Form1 中添加标签,将标签 labell 的 caption 属性设为
欢迎你进入学生信息管理系统。
②将表单 Form1 的 ShowWindow 属性设为 2,作为顶层表单。
③Form1 的 Init 事件代码如下:
do p7_22.mpr with this, .T.
④执行表单
表单菜单→执行表单,打开确认对话框→是→打开另存为对话框→在另存表
单为文本框中输入表单名 P7_2→保存。
7.1.3 建立快捷菜单
快捷菜单是由一个或一组上下级的弹出式菜单组成。它主要是对某一个界面
对象选中后单击鼠标右键而出现的,它是针对用户对某一具体对象操作时快速出
现的菜单,在这一方面与下拉式菜单不同。由于快捷菜单简单方便,用户非常容
易掌握它的操作和使用,因此应用极为普遍。
1. 快捷菜单的建立
(1)打开快捷菜单设计器
文件菜单→新建命令或常用工具栏中的新建按钮,打开新建对话框→在文件
类型中选菜单→新建文件,打开新建菜单对话框如图 7.1 所示→快捷菜单,打开
快捷菜单设计器如图 7.14 所示。
从快捷菜单设计器中发现它与菜单设计器中的项目是一样的,此外它的整个
对快捷菜单的定义与下拉菜单也相似。
(2)释放快捷菜单命令
格式:RELEASE POPUS <快捷菜单名> []
功能:从内存删除由快捷菜单名指定的菜单。
说明:当选[]时删除菜单,菜单项和所有与 ON SELECTION
POPUP 及 ON SELECTION BAR 有关的命令。一般此命令可放在快捷菜单的清
理代码中。
2.生成快捷菜单
快捷菜单与下拉菜单的生成方法相同。
3.快捷菜单的执行
在选定对象的 RightClick 事件代码中添加如下命令:DO <快捷菜单名>.mpr。
图 7.15 例 7.3 界面
例 7.3 设计两个快捷菜单,一个名为 P7_31,它是表单的快捷菜单,它含有
两个菜单选项:学生自然情况、学生成绩。选学生自然情况显示”欢迎使用学生
管理系统”,选学生成绩显示”欢迎使用学生成绩管理系统”。显示信息用
messagebox()制作。另一个名为 P7_32,它是表单中标签 labell 的快捷菜单,它含
有 3 个菜单项:快捷菜单使用说明,快捷菜单的操作,快捷菜单的帮助。要求选
每个菜单项都要显示相应的信息对话框,即用 messagebox()制作的对话框。表单
如图 7.15 所示。
操作步骤如下:
(1)建立表单的快捷菜单 P7_31
1)打开快捷菜单设计器
文件菜单→新建,打开新建对话框→在文件类型中选菜单→新建文件,打开
新建菜单对话框→快捷菜单,打开快捷菜单设计器→定义快捷菜单各菜单项如图
7.16 所示。
2)生成菜单程序
图 7.16 快捷菜单的菜单项
菜单→生成,打开确认对话框→是,打开另存为对话框→在保存菜单为文本
框中输入快捷菜单名 P7_31→保存,打开生成菜单对话框→生成
3)关闭快捷菜单设计器
(2)用同样的方法建立快捷菜单 P7_32
(3)建立表单
1)按图 7.15 建立界面与属性
2)command1 即退出按钮的 click 事件代码 5 如下:
thisform.release
3)Form1 的 RightClick 事件代码 如下:
DO P7_31.mpr
4)Labell 的 RightClick 事件代码如下:
DO P7_32.mpr
(4)将表单保存为 P7_3.scx
(5)执行表单
7.2 建立工具栏
工具栏是将那些使用频繁的多种功能,转化成直观、形象、快捷、高速、简
单方便的图形工具的集合。它已成为应用程序中不可缺少的组成部分。我们可以
将那些用户经常重复执行的任务定义成自定义工具栏,以加速任务的执行。在这
里介绍两种定义自定义工具栏的方法。
1. 运用容器定义自定义工具栏
这种方法是在表单中放置一个容器控件。在容器中可放图形化的按钮或复选
框,让这些按钮或复选框完成不同的功能。
例 7.4 设计一个表单,表单中有一个标签控件显示”欢迎”,用容器设计一个
工具栏,内有两个图形工具,一个为红色,它可将“欢迎”两字的颜色变为红色。
另一个为隶书,它可将“欢迎”两字的字体变为隶书。若不选用工具栏,“欢迎”
为黑色黑体。表单如图 7.17 所示。
图 7.17 例 7.4 界面
操作步骤如下:
(1)按图 7.17 设计表单,表单中拖放一个标签 Labell,按图为它设置 caption
属性;拖放一个容器 container1;在容器中放两个复选框 CHECK1,CHECK2,按图
7.17 为它们设置 caption 属性,然后分别将 CHECK1,CHECK2 的 style 属性设为
1-图形。再在表单中拖放一个按钮 command1,按图为它设置 caption 属性。
(2)Form1 的 Init 事件代码如下:
thisForm.labell.forecolor=rgb(0, 0, 0)
thisform.label1.fontname="黑体"
thisform.label1.fontsize=70
thisform.container1.check1.value=0
thisform.container1.check2.value=0
(3)“红色”check1 的 click 事件代码如下:
if thisform.container1.check1.value=1
thisform.label1.forecolor=rgb(255, 0, 0)
else
thisform.label1.forecolor=rgb(0, 0, 0)
endif
(4)“隶书”check2 的 click 事件代码如下:
if thisform.container1.check2.value=1
thisform.label1.fontname="隶书"
else
thisform.label1.fontname="黑体"
endif
(5)“退出”command1 的 click 事件代码如下:
thisform.release
(6)将表单保存为 P7_4.scx
(7)执行表单
2. 用定义工具栏类定义自定义工具栏
这种方法是定义一个基于工具栏类的自定义工具栏类,在表单集中创建自定
义工具栏对象,这个自定义工具栏是属于整个表单表单集的,下面介绍自定义工
具栏步骤。
(1)自定义工具栏类
文件菜单→新建或常用工具栏中的新建按钮,打开新建对话框→在文件类型
中选类→新建文件按钮,打开如图 7.18 所示的新建类对话框→在类名文本框中
输入一个名字,如自定义工具栏→在派生于下拉列表框中选 Toolbar→在存于文
本框中输入一个工具栏的名,如用户控件→确定,打开类设计器如图 7.19 所示,
此时开始对自定义工具栏类进行编辑。
图 7.18 新建类对话框
图 7.19 类设计器
(2)将类添加到工具栏中
单击表单工具栏中的查看类按钮,打开弹出菜单→选“添加”菜单项,打开
“打开对话框” →在文件类型中选可视类库→在文件列表中选用户控件→确定,
此时在表单工具栏中已有了自定义工具栏
(3)在表单集中创建自定义工具栏对象
建一个表单集→将表单控件工具栏中的自定义工具栏按钮拖入表单中即可
(3)sys(1500)函数
格式:sys(1500, <系统菜单项名>, <菜单名>︱<子菜单名>)
功能:激活 VFP 系统由子菜单名(或表单名)指定的子菜单中由系统菜单项名
指定的菜单项。
sys(1500)函数有时可以用在制作工具栏。通过它可以调用系统菜单的功能来
实现工具栏某工具按钮的功能。
图 7.20 例 7.5 界面
例 7.5 设计一个带有图形工具栏的表单如图 7.20 所示。图形工具栏共有 6
个按钮分别为新建、打开、保存、剪切、复制、粘贴。在 Edit1,Edit2 中可利用
工具栏自身或相互进行复制、剪切、粘贴。
操作步骤如下:
1)建立自定义工具栏 Zt 类
文件菜单→新建,打开新建对话框→在文件类型中选类→新建文件,打开新
建类对话框→在类名文本框中输入 Zt→在派生于下拉列表框中选 Toolbar→在存
储于文本框中输入用户工具如图 7.21 所示→确定,打开类设计器如图 7.22 所示。
图 7.21 新建类 Zt
图 7.22 类设计器
2)对 Zt 类编辑
①在新建工具栏中添加 6 个命令按钮即 command1~command6
②修改每个按钮的 picture 属性如图 7.20 所示
③创建 r 属性
类菜单→新建属性,打开新属性对话框→在名称文本框中输入 r→添加→关
闭
④Zt 的 Init 事件代码如下:
LPARAMETERS f
this.r=f
⑤Zt 的 AfterDock 事件代码如下:
with _VFP.activeform
.top=0
.left=0
.height=thisform.r.height-32
.width=thisform.r.width-8
endwith
⑥command1 的 click 事件代码如下:
sys(1500, ”_mfi_new”, ”_mfile”)
图 7.22 类设计器
⑦command2 的 click 事件代码如下:
sys(1500, ”_mfi_open”, ”_mfile”)
⑧command3 的 click 事件代码如下:
sys(1500, ”_mfi_save”, ”_mfile”)
⑨command4 的 click 事件代码如下:
sys(1500, ”_med_cut”, ”_medit”)
⑩command5 的 click 事件代码如下:
sys(1500, ”_med_copy”, ”_medit”)
○11 command6 的 click 事件代码如下:
sys(1500, ”_med_paste”, ”_medit”)
○12 关闭类设计器
关闭类设计器,打开确认对话框→是,此时就按用户工具.VCX 可视类库文
件保存了。
3)建立表单
按图 7.20 所示建立表单且拖放两个编辑框控件 edit1、edit2
4)创建表单集
表单菜单→创建表单集
5)将自定义工具栏 Zt 类添加到工具栏
单击表单控件工具栏中的查看类按钮,打开弹出菜单→添加,打开“打开对
话框”→在文件类型中选可视类库→在文件列表框中选用户工具.VCX→打开,
此时 Zt 类自定义工具栏已在表单控件工具栏中
6)将 Zt 工具栏拖放到表单中
7)将表单按 P7_5.SCX 存盘
8)执行表单
7.3 小结
菜单和工具栏已成为应用程序必不可少的组成部分,菜单可以使用户一目了
然的知道应用程序的总体功能和结构;工具栏可以使用户更为简捷地使用常用工
具,因此说菜单和工具栏是直接与用户交互的界面。
菜单的设计应先规划后创建,菜单分为两种:一种为下拉式菜单,用于定义
应用程序的总体菜单;另一种是快捷菜单,它是针对某一具体对象而响应的菜单。
在这里介绍了两种工具栏,一种为用容器中放按钮或复选框制作的工具栏;
一种为用类制作的工具栏,在实际应用中应根据不同需要进行选择应用。
习题与上机
1. 选择题
(1)有连续两个菜单项追加和删除,要用分隔线将这两个菜单项分组,实现这一
功能的方法是( )
A 在两个菜单项中添加一个菜单项 ,且在名称栏中输入“\-”
B 在追加菜单项名称前面加上“\-追加”名称栏中输入“\-追加”
C 在删除菜单项名称前加上“\-删除”
D 以上都不对
(2)在使用菜单设计器设计菜单时 ,如果要使所设计的统计菜单项的热键为 S 时,
可在菜单名称栏中输入( )
A 统计(ALT + F) B 统计(KS) C 统计(S) D 统计(CTAR + S)
(3)菜单或菜单项所要执行的任务结果是( )
A 事件 B 方法 C 过程或命令 D ABC 都对
(4)用于自定义工具栏类的基类是( )
A command Button B Form C Tool bar D Label
(5)生成菜单的程序文件扩展名是( )
A prg B frt C mpr D pix
2. 用菜单设计器设计菜单
(1)设计一个下拉菜单具体要求如下:
① 条形菜单的菜单项包括:文件操作(E)、查询(I)、统计(S)、报表输出(R),退
出(Q),它们分别激活弹出式菜单 fe、ie、se、re。
② 弹出式 fe 的菜单项包括:追加 ,修改 ,删除。它们的快捷键分别是:
CTRL+Z , CTRL+G , CTRL+D。
③ 弹出式菜单 Ie 的菜单项包括:查询学生自然情况 ,查询学生成绩 ,它们的
快捷键分别为: CTRL+K , CTRL+Id 。
④ 弹出式菜单 se 的菜单项为学生的总分 ,快捷键为:CTRL+L 。
⑤ 弹出式 re 的菜单项包括:学生情况表 ,快捷键为 CTRL+B 。
⑥ 以上各菜单项可执行一个对话框 ,内容自定。
⑦ 退出菜单项要求用过程写代码 ,恢复主菜单 ,命令窗口 ,退出 VFP 系统。
(2)设计一个表单 ,表单中有列表框 ,标签 ,文本框 ,请为表单及表单中个控件分
别设计一个快捷菜单。快捷菜单中的菜单项及菜单项执行的任务自定。
第7章 菜单与工具栏
7.1 建立菜单
7.1.1 规划菜单
7.1.2建立下拉式菜单
7.1.3 建立快捷菜单
7.2 建立工具栏
7.3 小结