2009-7-26 Visual FoxPro 6.0程序设计 1
第 9章 VFP6菜单设计学习要点
1、规划应用程序菜单系统。
2、使用菜单设计器设计应用系统菜单,为菜单指定任务。
3、自定义工具栏及在表单集中添加自定义工具栏。
9.1 在应用程序中使用菜单
9.2 创建自定义工具栏退 出小 结返 回
2009-7-26 Visual FoxPro 6.0程序设计 2
9.1 在应用程序中使用菜单
9.1.1 创建菜单系统
9.1.2 规划菜单系统
9.1.3 创建菜单
9.1.4 在应用程序中包含菜单
9.1.5 为菜单系统指定任务退 出
2009-7-26 Visual FoxPro 6.0程序设计 3
9.1.1 创建菜单系统用户在查找信息之前,首先看到的便是菜单。如果把菜单设计得很好,那么只要根据菜单的组织形式和内容,用户就可以很好地理解应用程序。为此,VFP提供了“菜单设计器”,可以用来创建菜单,提高应用程序的质量。
创建菜单系统的大量工作是在“菜单设计器”中完成。
在项目管理器中选择
“其他”选项卡,从中选择“菜单”,然后单击
“新建”打开“新建菜单”
对话框。 选择“菜单”,打开
“菜单设计器”。
2009-7-26 Visual FoxPro 6.0程序设计 4
创建一个菜单系统包括若干步骤。不管应用程序的规模多大,
打算使用的菜单多么复杂,创建菜单系统都需以下步骤:
第 1步、规划与设计系统:确定需要哪些菜单、出现在界面的何处以及哪几个菜单要有子菜单等等。有关规划菜单系统的详细内容,请参阅本章稍后的规划菜单系统。
第 2步、创建菜单和子菜单:使用菜单设计器可以定义菜单标题、
菜单项和子菜单。
第 3步、按实际要求为菜单系统指定任务:指定菜单所要执行的任务,例如显示表单或对话框等。另外,如果需要,还可以包含初始化代码和清理代码。初始化代码在定义菜单系统之前执行,
其中可以打开文件;声明变量;或将菜单系统保存到堆栈中,以便可以在后面的程序执行中恢复。清理代码中包含的代码在菜单的定义代码之后执行,使菜单和菜单项可用或不可用。
第 4步、生成菜单程序。
第 5步、运行生成的程序,测试菜单系统。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 5
9.1.2 规划菜单系统应用程序的实用性一定程度上取决于菜单系统的质量。花费一定时间规划菜单,有助于用户接受这些菜单,同时也有助于用户对这些菜单的学习。设计菜单系统时,要考虑下列准则:
以建立 Gxglxt菜单为例说明规划菜单系统的准则:
1、按照用户所要执行的任务组织系统,而不要按应用程序的层次组织系统。只要查看菜单和菜单项,用户就应该可以对应用程序的组织方法有一个感性认识。因此,要设计好这些菜单和菜单项,必须清楚用户思考问题的方法和完成任务的方法。
根据简单的 Gxglxt项目的基本任务,可以将所建立的菜单系统分为和系统有关的操作(如操作员注册、添加、删除操作员、退出系统等);与数据输入有关的操作(如添加新系、添加新班级、添加新专业、添加新课程等、学生注册、成绩录入);与数据输出有关的操作(如学生情况报表、学生成绩报表);与信息查询有关的操作(如系查询、班级查询、专业查询、课程查询、学生查询等);最后是帮助。
2009-7-26 Visual FoxPro 6.0程序设计 6
2、给每个菜单一个有意义的菜单标题。
第一个菜单笺命令名为 【 系统管理 】,其中包括菜单项 【 操作员注册 】,【 添加操作员 】,【 删除操作员 】,【 退出 】 ;第二个菜单笺命令名为 【 输入数据 】,其中包括菜单项 【 添加新系 】,【 添加新班级 】,【 添加新专业 】,【 添加新课程 】,
【 学生注册 】,【 成绩录入 】 ;第三个菜单笺命名为 【 报表 】,
其中包括 【 学生情况报表 】,【 打印学生成绩 】 ;第四个菜单笺命名为 【 查询 】,其中包括 【 系查询 】,【 班级查询 】,
【 专业查询 】,【 课程查询 】,【 学生查询 】 ;第五个菜单笺命名为 【 帮助 】,其中只包含 【 关于 】 菜单项 。
3、按照估计的菜单项使用频率、逻辑顺序或字母顺序组织菜单项。如果不能预计频率,也无法确定逻辑顺序,则可以按字母顺序组织菜单项。当菜单中包含有八个以上的菜单项时,按字母顺序特别有效。太多的菜单项需要用户花费一定的时间才能浏览一遍,而按字母顺序则便于查看菜单项。
通常是将 【 系统管理 】 放在第一位,然后才是对数据的有关操
2009-7-26 Visual FoxPro 6.0程序设计 7
作的菜单。可按 【 系统管理 】,【 数据输入 】,【 查询 】,【 报表 】,【 帮助 】 的次序设置菜单。
4,放置分隔线:第一个菜单笺中在 【 退出 】 菜单项上设置一条,第二个菜单笺将 【 学生注册 】,【 成绩录入 】 菜单项与其它菜单项分开,第三个菜单笺不设分隔线,第四个菜单笺分成三个部分,【 系查询 】,【 班级查询 】 为第一部分;专业查询 】,
【 课程查询 】 为第二部分; 【 学生查询 】 为第三部分,第五个菜单笺不设分隔线。
5、将菜单上菜单项的数目限制在一个屏幕之内。
6、如果菜单项的数目超过了一屏,则应为其中的一些菜单项创建子菜单。
7、为菜单项指定任务:
2009-7-26 Visual FoxPro 6.0程序设计 8
8、为菜单和菜单项设置访问键或键盘快捷键。
说明,【 退出 】 习惯用 Alt+E,【 帮助 】 习惯用 Alt+H,【 关于 】
习惯用 Alt+A作为访问键,其它可任意设定,但最好是使用 Ctrl+
或 Alt+和能代表菜单项功能的某一个特殊的字母组合为快捷键,
快捷键的定义在一个菜单中不要有重复。
9、使用能够准确描述菜单项的文字。描述菜单项时,要使用日常用语而不要使用计算机术语。同时,说明选择一个菜单项产生的效果时,应使用简单、生动的动词,而不要将名词当作动词使用,另外,要用相似语句结构说明菜单项。
10、在菜单项中混合使用大小写字母。 返 回
2009-7-26 Visual FoxPro 6.0程序设计 9
9.1.3 创建菜单规划好菜单系统之后,就可以使用菜单设计器创建该系统了。
这时,可以创建菜单、快捷菜单、菜单项、子菜单和菜单项组之间的分隔线等等。
1、创建菜单按前述方法打开“菜单设计器”。
“菜单设计器”中选项说明:
“菜单名称”:在菜单系统中指定菜单标题和菜单项的名称。
2009-7-26 Visual FoxPro 6.0程序设计 10
“结果”:指定在选择菜单标题或菜单项时发生的动作。例如,
可执行一个命令,打开一个子菜单或运行一个过程。
“创建”:在“结果”项中选择“子菜单”或“过程”时,用于指定菜单标题或菜单项的子菜单或过程。
“编辑”:在创建了“子菜单”或“过程”后,可以更改与菜单标题或菜单项相关的子菜单或过程。
“选项”:显示“提示选项”对话框,可以在其中定义键盘快捷键和其它菜单选择。
“菜单级”:弹出下拉菜单,让用户选择要处理的菜单或子菜单。
“预览”:显示正在创建的菜单的预览结果。
“插入”:在“菜单设计器”窗口中插入新的一行。
“插入栏”:显示“插入系统菜单条”对话框,使用户可以插入标准的 VFP菜单项。
“删除”:从“菜单设计器”中删除当前菜单行。
利用菜单设计器窗口各个选项就可以设计完整的菜单。
2009-7-26 Visual FoxPro 6.0程序设计 11
1、创建 Gxglxt菜单
1、创建 【 系统 】
管理菜单笺 系统管理 (\<S)
创建 【 数据输入 】
菜单笺数据输入 (\<I)
创建 【 报表 】 菜单笺报表 (\<R)
创建 【 查询 】 菜单笺查询 (\<Q)
创建 【 帮助 】 菜单笺帮助 (\<H)
2、创建 【 系统管理 】 的子菜单:选择 【 系统管理 】
单击 【 创建 】 创建 【 操作员注册 】 菜单项操作员注册单击 【 选项 】 按钮设置快捷键在光标置于此栏后按下要定义的快捷键 Ctrl+O
单击 【 确定 】,提示选项”对话框
2009-7-26 Visual FoxPro 6.0程序设计 12
按相同的方法创建 【 添加操作员 】,【 删除操作员 】,
【 退出 】 三个菜单项。
在指定的菜单项( 【 删除操作员 】 与 【 退出 】 菜单项之间)中添加分隔线:
选中下面的菜单项 【 退出 】 后单击 【 插入 】 按钮。
删除“新菜单项”几个字后输入,\-”
【 系统管理 】 菜单笺定义后,单击“菜单级”下拉选择框,从中选择“菜单栏”。
按创建子菜单的方法创建其他菜单笺下的菜单项(子菜单),过程略。
2009-7-26 Visual FoxPro 6.0程序设计 13
3、为菜单项指定任务子菜单创建后,
此处的“创建”
将变为“编辑”。
单击 【 编辑 】
单击“结果”下拉选择框,从中选择“命令”。在此框中输入该菜单项应执行的命令,Do
Form Forms\operator 说明:表单按,上机指导,中的定义,使用同样的方法为另三个菜单项指定任务。
【 系统管理 】 菜单笺中各菜单项的任务指定完成后,单击“菜单级”下拉选择框,从中选择“菜单栏”。
按相同的方法分别为 【 数据输入 】,【 报表 】,【 查询 】,【 帮助 】 的子菜单中各菜单项指定任务。
菜单设计完成后,选择系统菜单上的 【 菜单 】 |【 生成 】,生成,MPR文件。
2009-7-26 Visual FoxPro 6.0程序设计 14
生成 gxglxt.mpr文件后,便可以在项目管理器中运行该文件:在项目管理器中选择“其他”选项卡,然后从“菜单”中选择
,gxglxt”,再单击 【 运行 】 。运行的结果格式如下:
各子菜单格式如下:
最后的一项 【 项目 】 并不是我们所定义的共单笺。因为我们是在“项目管理器”中运行的 gxglxt.mpr文件,项目管理器没有关闭才有 【 项目 】 这一项。如果在菜单运行后将“项目管理器”关闭,则这一项将会变为 【 格式 】 。在应用程序中将菜单连编后脱离 VFP运行时,就不会有这一项。
2009-7-26 Visual FoxPro 6.0程序设计 15
2、通过修改快速菜单得到自户自定义菜单若要从已有的 VFP菜单系统开始创建菜单,则可以使用“快速菜单”功能。若要用“快速菜单”创建菜单系统,可以按下列步骤进行:
打开“菜单设计器”,然后从系统菜单上的 【 菜单 】 中选择
【 快速菜单 】 。
在“快速菜单”中通过 【 插入 】,【 删除 】 或修改得到所要求的菜单格式。
2009-7-26 Visual FoxPro 6.0程序设计 16
例如,如果要在“帮助”菜单前插入“客户”菜单,可以选择与“帮助”菜单行,再选择“插入”按钮,然后在“菜单名称”
栏中键入“客户”,其结果如图 。
移动按钮注意:拖动移动按钮可以改变菜单栏上各菜单的位置。
如果需要“帮助”菜单,应将它安排在菜单栏上的最后,这样用户能够很快找到它。
在应用程序中使用菜单之前,必须将它生成。
2009-7-26 Visual FoxPro 6.0程序设计 17
3、创建快捷菜单在 VFP6或者在 Windows中,选定某个控件或对象后单击右键时,
就会显示快捷菜单,可以快速展示对当前对象进行操作的各种可用的功能 。 正是因为这种菜单的方便快捷,它才被称为快捷菜单 。
可用 VFP创建快捷菜单,并将这些菜单附加在控件中 。
若要创建快捷菜单 。 可从,项目管理器,中选择 【 其他 】 选项卡,
选择,菜单,,并选定 【 新建 】 。 接下来选择 【 快捷菜单 】,则出现,快捷菜单设计器,。
进入“快捷菜单设计器”
后,添加菜单项的过程与创建菜单完全相同。
2009-7-26 Visual FoxPro 6.0程序设计 18
例如,创建一个包含有二个选项 【 运行表单 】 和 【 关闭 】 的快捷菜单。浏览命令的代码是 DO FORM?,在关闭菜单定义时,
“结果”栏中选择“菜单项 #”,在“结果”栏后的栏中输入
,_mfi_close”,表示调用系统菜单中的“关闭”功能。创建完成后,将生成一个菜单名为 Myquickmenu.mpr,其中 Myquickmenu
是自己命名的菜单文件名。所创建的菜单结果如图然后在系统菜单中选择 【 菜单 】 |【 生成 】,生成 QuickMenu.mpr。
最后在“属性示例”表单的 RightClick Event方法程序中添加下行代码:
Do Menus\QuickMenu.mpr
返 回
2009-7-26 Visual FoxPro 6.0程序设计 19
9.1.4 在应用程序中包含菜单创建了菜单系统后,可将其包含在应用程序中。若要在应用程序中包含菜单,可将,mnx文件添加到项目中,并由项目建立应用程序。
创建并生成了快捷菜单以后,就可将其附加到控件中。当用户在控件上单击鼠标右键时,显示典型的快捷菜单。在控件的 Rig-
htClick(单击鼠标右键)事件中输入少量代码,即可将快捷菜单附加到特定的控件中。
先选择要附加快捷菜单的控件,然后在“属性”窗口中选择
“方法程序”选项卡并选择,RightClick Event”最后在代码窗口中键入 Do menu.mpr,其中 menu是快捷菜单的文件名。
注意:引用快捷菜单时,必须使用,mpr扩展名。
如在上一节中,在“属性示例”表单的 RightClick Event事件代码中添加代码 DO Menus\Quickmenu.mpr。
2009-7-26 Visual FoxPro 6.0程序设计 20
如果想将此快捷菜单应用于所有新创建的表单,则可以修改表单的类定义。步骤如下:
( 1)打开“项目管理器”并选择“类”选项卡。
( 2)选择 【 添加 】,将 C:\Program Files\Microsoft Visual Studio\Vfp98\
Wizar-ds\Wizembss.vcx添加到“类”中。
单击 【 确定 】
( 3)单击 Wizembss
类前的,+”号,再选择 Embossedform子类
( 4)选择“项目管理器”上的 【 修改 】
按钮,打开“类设计器” ( 5)选择“属性”
对话框中的“方法程序”
选项卡,再选定
RightClick Event事件。
( 6)双击 RightClick
Event,打开方法程序代码编辑窗口,在该窗口中输入命令,
DO MENUS\QUICKMENU.MPR
2009-7-26 Visual FoxPro 6.0程序设计 21
( 7)关闭“方法程序”编辑窗口,关闭“类设计器”窗口,将所做的修改保存到 Embossedform子类中。
说明,Embossedform子类是建立表单的类 ( Class),以后所建的表单均含有单击右键时调用
Myquickmeun菜单的功能 。
若要将 SDI菜单附加到表单中可在创建了 SDI菜单后,将其附加到 SDI表单中,其步骤如下:
( 1) 在,表单设计器,中,将表单的 Show Window属性设置为
,2-作为顶层表单,。
( 2)在表单的 Init事件中调用该菜单。例如,假设菜单名为 Quickmenu.mpr,
添加此代码:
DO Quickmenu.mpr WITH THIS,.T.
返 回
2009-7-26 Visual FoxPro 6.0程序设计 22
9.1.5 为菜单系统指定任务在创建菜单系统时,需要考虑系统访问的简便性,也必须为系统指定任务。必须为菜单和菜单项指定所执行的任务,如显示表单、工具栏以及其他的菜单系统。
用户应该定义可以访问菜单系统的访问键,还可以添加键盘快捷键,并且控制菜单何时可用。
1、指定访问键设计良好的菜单都具有访问键,从而通过键盘可以快速地访问菜单的功能。在菜单标题或菜单项中,访问键用带有下划线的字母表示。例如,VFP的 【 文件 】 菜单使用,F”作为访问键。
如果没有为某个菜单标题或菜单项指定访问键,VFP将自动指定第一个字母作为访问键。例如,假定没有给创建的,EDIT”菜单定义访问键,VFP将指定第一个字母( E)作为它的访问键。
若要为菜单或菜单项指定访问键,可在希望成为访问键的字母左侧键入,\<”。例如,要在,EDIT”菜单标题中设置,I”作为访问键,可在“菜单名称”栏中将,EDIT”替换为,ED\<IT”或
,EDIT\<I”。
2009-7-26 Visual FoxPro 6.0程序设计 23
2、指定键盘快捷键除了指定访问键以外,还可以为菜单或菜单项指定键盘快捷键。
和使用访问键一样,使用键盘快捷键是让用户在按下某个键的同时,再按另一个键而选择菜单或菜单项。访问键与键盘快捷键的区别是:使用快捷键可以在不显示菜单的情况下选择此菜单中的一个菜单项。
VFP菜单项的快捷键一般用 Ctrl或 Alt键与另一个键相组合。例如,
按 Ctrl+N可在 VFP中创建新文件。
若要为菜单或菜单项指定快捷键,可以先在“菜单名称”栏中,
选择相应的菜单标题或菜单项,再选择“选项”栏中的按钮,显示“提示选项”对话框,如图 9-9所示。
然后在“键标签”框中,按下一组合键,可创建快捷键,如果一个菜单项没有快捷键,VFP将在“键标签”框中显示“按下要定义的键”,最后在“键说明”框中,添加希望在菜单项的旁边出现的文本。
注意,Ctrl+J是无效的快捷键,因为在 VFP中,经常将其作为关闭某些对话框的快捷键。
2009-7-26 Visual FoxPro 6.0程序设计 24
3、启用和废止菜单项可以根据逻辑条件启用或废止菜单及菜单项。设 Gxglxt菜单中各项启用和废止条件如下表说明,czyqx为在菜单运行前所赋值的一个字符型内存变量,在,上机指导,
中是在 Operator表单中赋的值。
菜单的启用或废止是根据所给条件计算得到,当条件为,T.时即将菜单笺或菜单项废止,如不给条件,默认为,F.,即启用 。 如果菜单笺废止,那么菜单笺中的所有菜单项均废止 。 如,系统管理,菜单笺下的,操作员注册,没有设置条件,即它按该菜单笺的条件执行 。
2009-7-26 Visual FoxPro 6.0程序设计 25
菜单启用和废止的设置方法:
①在“菜单设计器”的“菜单名称”栏中,选择相应的菜单标题或菜单项。
如“系统管理”菜单笺中的“操作员注册”共单项 。
② 单击“选项”按钮,显示“提示选项”对话框。
③ 选择“跳过”按钮,打开“表达式生成器”或直接在“跳过”文本框中输入条件表达式。
UPPER(CZYQX)>"A"
④ 单击 【 确定 】 按钮返回到“菜单设计器”
返回到“菜单设计器”后,可用同样的方法设置其他菜单项启用或废止。
2009-7-26 Visual FoxPro 6.0程序设计 26
4、输入过程或程序如:在 Gxglxt菜单的 【 查询 】 菜单笺中所有的菜单项均调用同一个表单查询界面(表单中的数据源来自系统当前工作区中的表),不同处是对不同的查询菜单项使用不同的表。由于使用同一表单界面,为菜单项指定任务时可以通过调用过程完成。
打开“菜单设计器”,进入到 【 查询 】 菜单笺中,如图:
将 【 查询 】
菜单笺中的所有菜单项的
“结果”设置为“过程”。
方法同前。然后选择 【 系查询 】,单击
【 创建 】 按钮。
在“系查询” -过程编辑窗口中输入过程代码:
PUBLIC NWORKAREA,LUSEED
NWORKAREA=SELECT(0)
LUSEED=.T.
IF !USED("DEPARTMENT")
LUSED=.F.
SELECT 0
USE DATA\DEPARTMENT
ENDIF
SELECT DEPARTMENT
DO FORM FORMS\DATAQUERY
然后关闭“过程”编辑窗口。
返回“菜单设计器”后,使用同样的方法为其他菜单项编辑过程。
共用的查询表单名
2009-7-26 Visual FoxPro 6.0程序设计 27
可以为菜单或菜单项指定一个过程,指定过程的方式取决于菜单或菜单项是否有子菜单。若要为不含有子菜单的菜单或菜单项指定过程,可以在“菜单名称”栏中,选择相应的菜单标题或菜单项,再在“结果”框中选择“过程”,“创建”按钮出现在列表的右侧。如果先前已定义了一个过程,则这里出现的是“编辑”按钮,再选择“创建”或“编辑”,在窗口中键入正确的代码。
由于 VFP会自动地生成 PROCEDURE语句,因而不必在过程编辑窗口中键入此语句,只有在清理代码中才需要 PROCEDURE语句。
为含有子菜单的菜单或菜单项指定过程的步骤如下:
( 1)请在“菜单级”框中,选择包含相应菜单或菜单项的菜单级。
( 2)从系统菜单中选择 【 显示 】 |【 菜单选项 】 。
( 3)可以用下列方法之一指定一个过程:在“过程”框中编写或调用过程,或者选择“编辑”,然后再选择“确定”,打开独立的编辑窗口并编写或调用过程。
2009-7-26 Visual FoxPro 6.0程序设计 28
5、向菜单系统添加初始化代码和清理代码向菜单系统添加初始化代码可以定制菜单系统,初始化代码可以包含创建环境的代码、定义变量的代码、打开所需文件的代码,
以及使用 PUSH MENU和 POP MENU保存或恢复菜单系统的代码。
向菜单系统中添加初始化代码,可以从系统菜单中选择 【 显示 】
|【 常规选项 】,在“菜单代码”区域,选择“设置”,然后再选择 【 确定 】,再在初始化代码窗口中,键入适当的初始化代码。
向菜单系统添加清理代码可以减小菜单系统的大小。清理代码常包含一些代码,在初始时启用或废止菜单系统中的菜单或菜单项。
在生成并运行菜单程序时,初始化代码及菜单定义代码在清理代码之前执行。向菜单系统中添加清理代码,可以从系统菜单中选择 【 显示 】 |【 常规选项 】,在“菜单代码”区域,选择“清理”,然后再选择 【 确定 】,再在清理代码窗口中,键入适当的清理代码。关闭“菜单设计器”时,同时保存所做的变更。
注意:如果设计的菜单是应用程序的主菜单,则应该在清理代码中包含 READ EVENTS命令,并为退出菜单系统的菜单命令指定一个 CLEAR命令。这可以防止应用程序的运行过早地中断。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 29
9.2 创建自定义工具栏
9.2.1 定义工具栏类
9.2.2 在表单集中添加自定义工具栏退 出返 回如果应用程序中包含一些用户经常重复执行的任务,那么可以添加相应的自定义工具栏,简化操作,加速任务的执行。
下面各节介绍的是为应用程序创建自定义工具栏的方法。
2009-7-26 Visual FoxPro 6.0程序设计 30
9.2.1 定义工具栏类如果要创建一个工具栏,要它包含己有工具栏所没有的按钮,
则可通过定义一个自定义工具栏类完成此任务。 VFP提供了一个工具栏基类,在此基础上可以创建所需的类。创建新类的方法在 5.4.5类的操作方法中已作详细的讲解。
定义了工具栏类以后,可向工具栏类添加对象,并为自定义工具栏定义属性、事件和方法程序,最后可将工具栏添加到表单集中。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 31
9.2.2 在表单集中添加自定义工具栏在定义一个工具栏类之后,便可以用这个类创建一个工具栏。
可以用“表单设计器”或者用编写代码的方法,将工具栏与表单对应起来。
1、在“表单设计器”中协调工具栏和表单可以在表单集中添加工具栏,让工具栏与表单集中的各个表单一起打开。但不能直接在某个表单中添加工具栏。使用“表单设计器”在表单集中添加工具栏的步骤如下:
( 1)先注册并选定包含工具栏类的类库。
( 2)打开要使用上述工具栏类的表单集,再从“表单控件”工具栏选择“查看类”,然后从显示的列表中选择该工具栏类。
( 3)从“表单控件”工具栏中选择工具栏类。
( 4)在“表单设计器”中单击,添加此工具栏,然后将工具栏拖动到适当的位置,VFP将在表单集上添加工具栏,如果表单集尚未打开,VFP将提示用户打开一个。
( 5)为工具栏及其按钮定义操作。
2009-7-26 Visual FoxPro 6.0程序设计 32
2、使用代码协调工具栏和表单除了使用“表单设计器”外,还可以使用代码在表单集中添加工具栏。如果要使用代码在表单集中添加工具栏,可以在表单集的 Init事件中,使用 SET CLASSLB命令,指定包含工具栏类的类库,然后在表单集中由此类创建工具栏。
例如,要添加并显示基于 _base类库中 _toolbar类的工具栏
mytoolbar,可以在表单集的 Init事件中添加下列代码:
SET CLASSLIB TO LIBS\_BASE
THIS.ADDOBJECT("MYTOOLBAR","_TOOLBAR")
THIS.MYTOOLBAR.SHOW
如果使用已经定义了的一个工具栏,如在第五章中定义的
NEWTOOLBAR工具栏,则可以在表单集的 Init事件添加如下代码:
SET CLASSLIB TO LIBS\NEWTOOLBAR ADDITIVE
THIS.ADDOBJECT("MYTOOLBAR","NEWTOOLBAR")
THIS.MYTOOLBAR.SHOW
注意,如果工具栏类没有定义工具栏及其按钮要执行的操作,那么必须在与工具栏及其按钮相关的事件过程中定义操作。
2009-7-26 Visual FoxPro 6.0程序设计 33
3、创建自定义工具栏示例可以在代码中定义工具栏的各个要素。例如,在第五章中定义的 NEWTOOLBAR工具栏没有指定工具栏及其按钮等要执行的操作,现以该工具栏添加到表单集为例,说明其方法。先在表单集的 Init事件中添加下列代码,当加载表单集时,VFP将创建并显示代码中定义的工具栏,该工具栏如图:
SET CLASSLIB TO LIBS\NEWTOOLBAR ADDITIVE
THIS.ADDOBJECT("MYTOOLBAR","NEWTOOLBAR")
THIS.MYTOOLBAR.SHOW
对 NEWTOOLBAR工具栏中各控件的执行代码定义的步骤及代码如下:
( 1)选择“项目管理器”中的“类”选项卡。
( 2)找到并选择以前定义的 NEWTOOLBAR类。
( 3)单击“项目管理器”的 【 修改 】 按钮。
2009-7-26 Visual FoxPro 6.0程序设计 34
( 4)分控件进行代码设计。
■对 Combo1组合框的代码进行定义:
●选择 Combo1控件,在“属性”中选择“其它”选项卡,将
Enabled属性设为“假” 。(在表单集中不设文章排版)。
■对 Combo2组合框的代码进行定义:
● 选择 Combo2控件,在,属性,中选择,数据,选项卡,将
RowSourceType属性设为,1-值,,将 RowSource属性设为 宋体,
黑体,仿宋,楷体 ( 还可以添加其它 VFP能识别的字体名 ) 。 设置初始值,将 Value属性设为 ="宋体 "。
● 选择,方法程序,选项卡,双击 Click Event,在弹出的代码编辑框中写入如下代码:
THISFORMSET.ActiveForm.ActiveControl.FontName=THIS.VALUE
2009-7-26 Visual FoxPro 6.0程序设计 35
■ 对 Combo3组合框的代码进行定义:
●在上一步的方法程序编辑框中,从“对象”后的组合框中选择
Combo3,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontSize=;
VAL(ALLTRIM(THIS.VALUE))
● 在“属性”中的对象选择框中选择 Combo3对象,再选择“数据”选项卡,将 RowSourceType属性设为,1-值”,将 RowSource
属性设为 8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72。设置初始值,将 Value属性设为 ="9"。
■对 Command1命令按钮的代码进行定义:
在上一步的方法程序编辑框中,从“对象”后的组合框中选择
Command1对象,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontBold=;
!THISFORMSET.ActiveForm.ActiveControl.FontBold
THIS.FontBold=THISFORMSET.ActiveForm.ActiveControl.FontBold
■ 对 Command2命令按钮的代码进行定义:
2009-7-26 Visual FoxPro 6.0程序设计 36
在上一步的方法程序编辑框中,从“对象”后的组合框中选择
Command2对象,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontItalic=;
!THISFORMSET.ActiveForm.ActiveControl.FontItalic
THIS.FontItalic=THISFORMSET.ActiveForm.ActiveControl.FontItalic
■ 对 Command3命令按钮的代码进行定义:
在上一步的方法程序编辑框中,从,对象,后的组合框中选择
Command3对象,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontUnderline=;
!THISFORMSET.ActiveForm.ActiveControl.FontUnderline
THIS.FontUnderline=THISFORMSET.ActiveForm.ActiveControl.FontUnderline
到此,对类设计定义完成,可关闭,方法程序编辑框,,关闭
,类设计器,并将所做修改保存 。
2009-7-26 Visual FoxPro 6.0程序设计 37
将该工具栏加入到 Student表单集运行后,选择表单上的“说明”
后面的编辑框对象,进行图中工具栏状态设置后(黑体,12磅字号、粗斜体、加下划线)的结果:
返 回
2009-7-26 Visual FoxPro 6.0程序设计 38
小 结
1、进行菜单系统设计前应先做好规划:
①按要执行的任务组织系统:即菜单系统中要设计哪几个菜单笺以及菜单笺在菜单系统中的顺序;
②每个菜单笺中应设置的菜单项以及菜单项的先后顺序,菜单项是否分组;
③菜单笺以及菜单项的中文名,访问键和键盘快捷键设置和定义;
④为菜单项指定任务,可以使用命令、菜单项、过程等;
⑤设置菜单的启用和废止条件以及菜单的说明信息。
2、使用“菜单设计器”根据所规划的菜单系统定义菜单系统:
①先设计菜单笺(包含中文名、先后顺序、访问键、启用及废止条件等);
②再设计菜单项(包含中文名、先后顺序、分隔线、快捷键、启用及废止条件、菜单项信息、菜单项应执行的任务等)。
3、使用“快捷菜单设计器”设计快捷菜单并在表单中包含快捷菜单或者在表单类中包含调用快捷菜单的命令。
4、使用“快速菜 单”设计系统菜单。
5、菜单设计完成后要生成菜单文件(,mpr文件)。
6、自定义工具栏,并在表单集中通过注册类的方法或在表单集的 Init事件中使用命令的方法添加自定义工具栏。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 39
第 9章 VFP6菜单设计学习要点
1、规划应用程序菜单系统。
2、使用菜单设计器设计应用系统菜单,为菜单指定任务。
3、自定义工具栏及在表单集中添加自定义工具栏。
9.1 在应用程序中使用菜单
9.2 创建自定义工具栏退 出小 结返 回
2009-7-26 Visual FoxPro 6.0程序设计 2
9.1 在应用程序中使用菜单
9.1.1 创建菜单系统
9.1.2 规划菜单系统
9.1.3 创建菜单
9.1.4 在应用程序中包含菜单
9.1.5 为菜单系统指定任务退 出
2009-7-26 Visual FoxPro 6.0程序设计 3
9.1.1 创建菜单系统用户在查找信息之前,首先看到的便是菜单。如果把菜单设计得很好,那么只要根据菜单的组织形式和内容,用户就可以很好地理解应用程序。为此,VFP提供了“菜单设计器”,可以用来创建菜单,提高应用程序的质量。
创建菜单系统的大量工作是在“菜单设计器”中完成。
在项目管理器中选择
“其他”选项卡,从中选择“菜单”,然后单击
“新建”打开“新建菜单”
对话框。 选择“菜单”,打开
“菜单设计器”。
2009-7-26 Visual FoxPro 6.0程序设计 4
创建一个菜单系统包括若干步骤。不管应用程序的规模多大,
打算使用的菜单多么复杂,创建菜单系统都需以下步骤:
第 1步、规划与设计系统:确定需要哪些菜单、出现在界面的何处以及哪几个菜单要有子菜单等等。有关规划菜单系统的详细内容,请参阅本章稍后的规划菜单系统。
第 2步、创建菜单和子菜单:使用菜单设计器可以定义菜单标题、
菜单项和子菜单。
第 3步、按实际要求为菜单系统指定任务:指定菜单所要执行的任务,例如显示表单或对话框等。另外,如果需要,还可以包含初始化代码和清理代码。初始化代码在定义菜单系统之前执行,
其中可以打开文件;声明变量;或将菜单系统保存到堆栈中,以便可以在后面的程序执行中恢复。清理代码中包含的代码在菜单的定义代码之后执行,使菜单和菜单项可用或不可用。
第 4步、生成菜单程序。
第 5步、运行生成的程序,测试菜单系统。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 5
9.1.2 规划菜单系统应用程序的实用性一定程度上取决于菜单系统的质量。花费一定时间规划菜单,有助于用户接受这些菜单,同时也有助于用户对这些菜单的学习。设计菜单系统时,要考虑下列准则:
以建立 Gxglxt菜单为例说明规划菜单系统的准则:
1、按照用户所要执行的任务组织系统,而不要按应用程序的层次组织系统。只要查看菜单和菜单项,用户就应该可以对应用程序的组织方法有一个感性认识。因此,要设计好这些菜单和菜单项,必须清楚用户思考问题的方法和完成任务的方法。
根据简单的 Gxglxt项目的基本任务,可以将所建立的菜单系统分为和系统有关的操作(如操作员注册、添加、删除操作员、退出系统等);与数据输入有关的操作(如添加新系、添加新班级、添加新专业、添加新课程等、学生注册、成绩录入);与数据输出有关的操作(如学生情况报表、学生成绩报表);与信息查询有关的操作(如系查询、班级查询、专业查询、课程查询、学生查询等);最后是帮助。
2009-7-26 Visual FoxPro 6.0程序设计 6
2、给每个菜单一个有意义的菜单标题。
第一个菜单笺命令名为 【 系统管理 】,其中包括菜单项 【 操作员注册 】,【 添加操作员 】,【 删除操作员 】,【 退出 】 ;第二个菜单笺命令名为 【 输入数据 】,其中包括菜单项 【 添加新系 】,【 添加新班级 】,【 添加新专业 】,【 添加新课程 】,
【 学生注册 】,【 成绩录入 】 ;第三个菜单笺命名为 【 报表 】,
其中包括 【 学生情况报表 】,【 打印学生成绩 】 ;第四个菜单笺命名为 【 查询 】,其中包括 【 系查询 】,【 班级查询 】,
【 专业查询 】,【 课程查询 】,【 学生查询 】 ;第五个菜单笺命名为 【 帮助 】,其中只包含 【 关于 】 菜单项 。
3、按照估计的菜单项使用频率、逻辑顺序或字母顺序组织菜单项。如果不能预计频率,也无法确定逻辑顺序,则可以按字母顺序组织菜单项。当菜单中包含有八个以上的菜单项时,按字母顺序特别有效。太多的菜单项需要用户花费一定的时间才能浏览一遍,而按字母顺序则便于查看菜单项。
通常是将 【 系统管理 】 放在第一位,然后才是对数据的有关操
2009-7-26 Visual FoxPro 6.0程序设计 7
作的菜单。可按 【 系统管理 】,【 数据输入 】,【 查询 】,【 报表 】,【 帮助 】 的次序设置菜单。
4,放置分隔线:第一个菜单笺中在 【 退出 】 菜单项上设置一条,第二个菜单笺将 【 学生注册 】,【 成绩录入 】 菜单项与其它菜单项分开,第三个菜单笺不设分隔线,第四个菜单笺分成三个部分,【 系查询 】,【 班级查询 】 为第一部分;专业查询 】,
【 课程查询 】 为第二部分; 【 学生查询 】 为第三部分,第五个菜单笺不设分隔线。
5、将菜单上菜单项的数目限制在一个屏幕之内。
6、如果菜单项的数目超过了一屏,则应为其中的一些菜单项创建子菜单。
7、为菜单项指定任务:
2009-7-26 Visual FoxPro 6.0程序设计 8
8、为菜单和菜单项设置访问键或键盘快捷键。
说明,【 退出 】 习惯用 Alt+E,【 帮助 】 习惯用 Alt+H,【 关于 】
习惯用 Alt+A作为访问键,其它可任意设定,但最好是使用 Ctrl+
或 Alt+和能代表菜单项功能的某一个特殊的字母组合为快捷键,
快捷键的定义在一个菜单中不要有重复。
9、使用能够准确描述菜单项的文字。描述菜单项时,要使用日常用语而不要使用计算机术语。同时,说明选择一个菜单项产生的效果时,应使用简单、生动的动词,而不要将名词当作动词使用,另外,要用相似语句结构说明菜单项。
10、在菜单项中混合使用大小写字母。 返 回
2009-7-26 Visual FoxPro 6.0程序设计 9
9.1.3 创建菜单规划好菜单系统之后,就可以使用菜单设计器创建该系统了。
这时,可以创建菜单、快捷菜单、菜单项、子菜单和菜单项组之间的分隔线等等。
1、创建菜单按前述方法打开“菜单设计器”。
“菜单设计器”中选项说明:
“菜单名称”:在菜单系统中指定菜单标题和菜单项的名称。
2009-7-26 Visual FoxPro 6.0程序设计 10
“结果”:指定在选择菜单标题或菜单项时发生的动作。例如,
可执行一个命令,打开一个子菜单或运行一个过程。
“创建”:在“结果”项中选择“子菜单”或“过程”时,用于指定菜单标题或菜单项的子菜单或过程。
“编辑”:在创建了“子菜单”或“过程”后,可以更改与菜单标题或菜单项相关的子菜单或过程。
“选项”:显示“提示选项”对话框,可以在其中定义键盘快捷键和其它菜单选择。
“菜单级”:弹出下拉菜单,让用户选择要处理的菜单或子菜单。
“预览”:显示正在创建的菜单的预览结果。
“插入”:在“菜单设计器”窗口中插入新的一行。
“插入栏”:显示“插入系统菜单条”对话框,使用户可以插入标准的 VFP菜单项。
“删除”:从“菜单设计器”中删除当前菜单行。
利用菜单设计器窗口各个选项就可以设计完整的菜单。
2009-7-26 Visual FoxPro 6.0程序设计 11
1、创建 Gxglxt菜单
1、创建 【 系统 】
管理菜单笺 系统管理 (\<S)
创建 【 数据输入 】
菜单笺数据输入 (\<I)
创建 【 报表 】 菜单笺报表 (\<R)
创建 【 查询 】 菜单笺查询 (\<Q)
创建 【 帮助 】 菜单笺帮助 (\<H)
2、创建 【 系统管理 】 的子菜单:选择 【 系统管理 】
单击 【 创建 】 创建 【 操作员注册 】 菜单项操作员注册单击 【 选项 】 按钮设置快捷键在光标置于此栏后按下要定义的快捷键 Ctrl+O
单击 【 确定 】,提示选项”对话框
2009-7-26 Visual FoxPro 6.0程序设计 12
按相同的方法创建 【 添加操作员 】,【 删除操作员 】,
【 退出 】 三个菜单项。
在指定的菜单项( 【 删除操作员 】 与 【 退出 】 菜单项之间)中添加分隔线:
选中下面的菜单项 【 退出 】 后单击 【 插入 】 按钮。
删除“新菜单项”几个字后输入,\-”
【 系统管理 】 菜单笺定义后,单击“菜单级”下拉选择框,从中选择“菜单栏”。
按创建子菜单的方法创建其他菜单笺下的菜单项(子菜单),过程略。
2009-7-26 Visual FoxPro 6.0程序设计 13
3、为菜单项指定任务子菜单创建后,
此处的“创建”
将变为“编辑”。
单击 【 编辑 】
单击“结果”下拉选择框,从中选择“命令”。在此框中输入该菜单项应执行的命令,Do
Form Forms\operator 说明:表单按,上机指导,中的定义,使用同样的方法为另三个菜单项指定任务。
【 系统管理 】 菜单笺中各菜单项的任务指定完成后,单击“菜单级”下拉选择框,从中选择“菜单栏”。
按相同的方法分别为 【 数据输入 】,【 报表 】,【 查询 】,【 帮助 】 的子菜单中各菜单项指定任务。
菜单设计完成后,选择系统菜单上的 【 菜单 】 |【 生成 】,生成,MPR文件。
2009-7-26 Visual FoxPro 6.0程序设计 14
生成 gxglxt.mpr文件后,便可以在项目管理器中运行该文件:在项目管理器中选择“其他”选项卡,然后从“菜单”中选择
,gxglxt”,再单击 【 运行 】 。运行的结果格式如下:
各子菜单格式如下:
最后的一项 【 项目 】 并不是我们所定义的共单笺。因为我们是在“项目管理器”中运行的 gxglxt.mpr文件,项目管理器没有关闭才有 【 项目 】 这一项。如果在菜单运行后将“项目管理器”关闭,则这一项将会变为 【 格式 】 。在应用程序中将菜单连编后脱离 VFP运行时,就不会有这一项。
2009-7-26 Visual FoxPro 6.0程序设计 15
2、通过修改快速菜单得到自户自定义菜单若要从已有的 VFP菜单系统开始创建菜单,则可以使用“快速菜单”功能。若要用“快速菜单”创建菜单系统,可以按下列步骤进行:
打开“菜单设计器”,然后从系统菜单上的 【 菜单 】 中选择
【 快速菜单 】 。
在“快速菜单”中通过 【 插入 】,【 删除 】 或修改得到所要求的菜单格式。
2009-7-26 Visual FoxPro 6.0程序设计 16
例如,如果要在“帮助”菜单前插入“客户”菜单,可以选择与“帮助”菜单行,再选择“插入”按钮,然后在“菜单名称”
栏中键入“客户”,其结果如图 。
移动按钮注意:拖动移动按钮可以改变菜单栏上各菜单的位置。
如果需要“帮助”菜单,应将它安排在菜单栏上的最后,这样用户能够很快找到它。
在应用程序中使用菜单之前,必须将它生成。
2009-7-26 Visual FoxPro 6.0程序设计 17
3、创建快捷菜单在 VFP6或者在 Windows中,选定某个控件或对象后单击右键时,
就会显示快捷菜单,可以快速展示对当前对象进行操作的各种可用的功能 。 正是因为这种菜单的方便快捷,它才被称为快捷菜单 。
可用 VFP创建快捷菜单,并将这些菜单附加在控件中 。
若要创建快捷菜单 。 可从,项目管理器,中选择 【 其他 】 选项卡,
选择,菜单,,并选定 【 新建 】 。 接下来选择 【 快捷菜单 】,则出现,快捷菜单设计器,。
进入“快捷菜单设计器”
后,添加菜单项的过程与创建菜单完全相同。
2009-7-26 Visual FoxPro 6.0程序设计 18
例如,创建一个包含有二个选项 【 运行表单 】 和 【 关闭 】 的快捷菜单。浏览命令的代码是 DO FORM?,在关闭菜单定义时,
“结果”栏中选择“菜单项 #”,在“结果”栏后的栏中输入
,_mfi_close”,表示调用系统菜单中的“关闭”功能。创建完成后,将生成一个菜单名为 Myquickmenu.mpr,其中 Myquickmenu
是自己命名的菜单文件名。所创建的菜单结果如图然后在系统菜单中选择 【 菜单 】 |【 生成 】,生成 QuickMenu.mpr。
最后在“属性示例”表单的 RightClick Event方法程序中添加下行代码:
Do Menus\QuickMenu.mpr
返 回
2009-7-26 Visual FoxPro 6.0程序设计 19
9.1.4 在应用程序中包含菜单创建了菜单系统后,可将其包含在应用程序中。若要在应用程序中包含菜单,可将,mnx文件添加到项目中,并由项目建立应用程序。
创建并生成了快捷菜单以后,就可将其附加到控件中。当用户在控件上单击鼠标右键时,显示典型的快捷菜单。在控件的 Rig-
htClick(单击鼠标右键)事件中输入少量代码,即可将快捷菜单附加到特定的控件中。
先选择要附加快捷菜单的控件,然后在“属性”窗口中选择
“方法程序”选项卡并选择,RightClick Event”最后在代码窗口中键入 Do menu.mpr,其中 menu是快捷菜单的文件名。
注意:引用快捷菜单时,必须使用,mpr扩展名。
如在上一节中,在“属性示例”表单的 RightClick Event事件代码中添加代码 DO Menus\Quickmenu.mpr。
2009-7-26 Visual FoxPro 6.0程序设计 20
如果想将此快捷菜单应用于所有新创建的表单,则可以修改表单的类定义。步骤如下:
( 1)打开“项目管理器”并选择“类”选项卡。
( 2)选择 【 添加 】,将 C:\Program Files\Microsoft Visual Studio\Vfp98\
Wizar-ds\Wizembss.vcx添加到“类”中。
单击 【 确定 】
( 3)单击 Wizembss
类前的,+”号,再选择 Embossedform子类
( 4)选择“项目管理器”上的 【 修改 】
按钮,打开“类设计器” ( 5)选择“属性”
对话框中的“方法程序”
选项卡,再选定
RightClick Event事件。
( 6)双击 RightClick
Event,打开方法程序代码编辑窗口,在该窗口中输入命令,
DO MENUS\QUICKMENU.MPR
2009-7-26 Visual FoxPro 6.0程序设计 21
( 7)关闭“方法程序”编辑窗口,关闭“类设计器”窗口,将所做的修改保存到 Embossedform子类中。
说明,Embossedform子类是建立表单的类 ( Class),以后所建的表单均含有单击右键时调用
Myquickmeun菜单的功能 。
若要将 SDI菜单附加到表单中可在创建了 SDI菜单后,将其附加到 SDI表单中,其步骤如下:
( 1) 在,表单设计器,中,将表单的 Show Window属性设置为
,2-作为顶层表单,。
( 2)在表单的 Init事件中调用该菜单。例如,假设菜单名为 Quickmenu.mpr,
添加此代码:
DO Quickmenu.mpr WITH THIS,.T.
返 回
2009-7-26 Visual FoxPro 6.0程序设计 22
9.1.5 为菜单系统指定任务在创建菜单系统时,需要考虑系统访问的简便性,也必须为系统指定任务。必须为菜单和菜单项指定所执行的任务,如显示表单、工具栏以及其他的菜单系统。
用户应该定义可以访问菜单系统的访问键,还可以添加键盘快捷键,并且控制菜单何时可用。
1、指定访问键设计良好的菜单都具有访问键,从而通过键盘可以快速地访问菜单的功能。在菜单标题或菜单项中,访问键用带有下划线的字母表示。例如,VFP的 【 文件 】 菜单使用,F”作为访问键。
如果没有为某个菜单标题或菜单项指定访问键,VFP将自动指定第一个字母作为访问键。例如,假定没有给创建的,EDIT”菜单定义访问键,VFP将指定第一个字母( E)作为它的访问键。
若要为菜单或菜单项指定访问键,可在希望成为访问键的字母左侧键入,\<”。例如,要在,EDIT”菜单标题中设置,I”作为访问键,可在“菜单名称”栏中将,EDIT”替换为,ED\<IT”或
,EDIT\<I”。
2009-7-26 Visual FoxPro 6.0程序设计 23
2、指定键盘快捷键除了指定访问键以外,还可以为菜单或菜单项指定键盘快捷键。
和使用访问键一样,使用键盘快捷键是让用户在按下某个键的同时,再按另一个键而选择菜单或菜单项。访问键与键盘快捷键的区别是:使用快捷键可以在不显示菜单的情况下选择此菜单中的一个菜单项。
VFP菜单项的快捷键一般用 Ctrl或 Alt键与另一个键相组合。例如,
按 Ctrl+N可在 VFP中创建新文件。
若要为菜单或菜单项指定快捷键,可以先在“菜单名称”栏中,
选择相应的菜单标题或菜单项,再选择“选项”栏中的按钮,显示“提示选项”对话框,如图 9-9所示。
然后在“键标签”框中,按下一组合键,可创建快捷键,如果一个菜单项没有快捷键,VFP将在“键标签”框中显示“按下要定义的键”,最后在“键说明”框中,添加希望在菜单项的旁边出现的文本。
注意,Ctrl+J是无效的快捷键,因为在 VFP中,经常将其作为关闭某些对话框的快捷键。
2009-7-26 Visual FoxPro 6.0程序设计 24
3、启用和废止菜单项可以根据逻辑条件启用或废止菜单及菜单项。设 Gxglxt菜单中各项启用和废止条件如下表说明,czyqx为在菜单运行前所赋值的一个字符型内存变量,在,上机指导,
中是在 Operator表单中赋的值。
菜单的启用或废止是根据所给条件计算得到,当条件为,T.时即将菜单笺或菜单项废止,如不给条件,默认为,F.,即启用 。 如果菜单笺废止,那么菜单笺中的所有菜单项均废止 。 如,系统管理,菜单笺下的,操作员注册,没有设置条件,即它按该菜单笺的条件执行 。
2009-7-26 Visual FoxPro 6.0程序设计 25
菜单启用和废止的设置方法:
①在“菜单设计器”的“菜单名称”栏中,选择相应的菜单标题或菜单项。
如“系统管理”菜单笺中的“操作员注册”共单项 。
② 单击“选项”按钮,显示“提示选项”对话框。
③ 选择“跳过”按钮,打开“表达式生成器”或直接在“跳过”文本框中输入条件表达式。
UPPER(CZYQX)>"A"
④ 单击 【 确定 】 按钮返回到“菜单设计器”
返回到“菜单设计器”后,可用同样的方法设置其他菜单项启用或废止。
2009-7-26 Visual FoxPro 6.0程序设计 26
4、输入过程或程序如:在 Gxglxt菜单的 【 查询 】 菜单笺中所有的菜单项均调用同一个表单查询界面(表单中的数据源来自系统当前工作区中的表),不同处是对不同的查询菜单项使用不同的表。由于使用同一表单界面,为菜单项指定任务时可以通过调用过程完成。
打开“菜单设计器”,进入到 【 查询 】 菜单笺中,如图:
将 【 查询 】
菜单笺中的所有菜单项的
“结果”设置为“过程”。
方法同前。然后选择 【 系查询 】,单击
【 创建 】 按钮。
在“系查询” -过程编辑窗口中输入过程代码:
PUBLIC NWORKAREA,LUSEED
NWORKAREA=SELECT(0)
LUSEED=.T.
IF !USED("DEPARTMENT")
LUSED=.F.
SELECT 0
USE DATA\DEPARTMENT
ENDIF
SELECT DEPARTMENT
DO FORM FORMS\DATAQUERY
然后关闭“过程”编辑窗口。
返回“菜单设计器”后,使用同样的方法为其他菜单项编辑过程。
共用的查询表单名
2009-7-26 Visual FoxPro 6.0程序设计 27
可以为菜单或菜单项指定一个过程,指定过程的方式取决于菜单或菜单项是否有子菜单。若要为不含有子菜单的菜单或菜单项指定过程,可以在“菜单名称”栏中,选择相应的菜单标题或菜单项,再在“结果”框中选择“过程”,“创建”按钮出现在列表的右侧。如果先前已定义了一个过程,则这里出现的是“编辑”按钮,再选择“创建”或“编辑”,在窗口中键入正确的代码。
由于 VFP会自动地生成 PROCEDURE语句,因而不必在过程编辑窗口中键入此语句,只有在清理代码中才需要 PROCEDURE语句。
为含有子菜单的菜单或菜单项指定过程的步骤如下:
( 1)请在“菜单级”框中,选择包含相应菜单或菜单项的菜单级。
( 2)从系统菜单中选择 【 显示 】 |【 菜单选项 】 。
( 3)可以用下列方法之一指定一个过程:在“过程”框中编写或调用过程,或者选择“编辑”,然后再选择“确定”,打开独立的编辑窗口并编写或调用过程。
2009-7-26 Visual FoxPro 6.0程序设计 28
5、向菜单系统添加初始化代码和清理代码向菜单系统添加初始化代码可以定制菜单系统,初始化代码可以包含创建环境的代码、定义变量的代码、打开所需文件的代码,
以及使用 PUSH MENU和 POP MENU保存或恢复菜单系统的代码。
向菜单系统中添加初始化代码,可以从系统菜单中选择 【 显示 】
|【 常规选项 】,在“菜单代码”区域,选择“设置”,然后再选择 【 确定 】,再在初始化代码窗口中,键入适当的初始化代码。
向菜单系统添加清理代码可以减小菜单系统的大小。清理代码常包含一些代码,在初始时启用或废止菜单系统中的菜单或菜单项。
在生成并运行菜单程序时,初始化代码及菜单定义代码在清理代码之前执行。向菜单系统中添加清理代码,可以从系统菜单中选择 【 显示 】 |【 常规选项 】,在“菜单代码”区域,选择“清理”,然后再选择 【 确定 】,再在清理代码窗口中,键入适当的清理代码。关闭“菜单设计器”时,同时保存所做的变更。
注意:如果设计的菜单是应用程序的主菜单,则应该在清理代码中包含 READ EVENTS命令,并为退出菜单系统的菜单命令指定一个 CLEAR命令。这可以防止应用程序的运行过早地中断。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 29
9.2 创建自定义工具栏
9.2.1 定义工具栏类
9.2.2 在表单集中添加自定义工具栏退 出返 回如果应用程序中包含一些用户经常重复执行的任务,那么可以添加相应的自定义工具栏,简化操作,加速任务的执行。
下面各节介绍的是为应用程序创建自定义工具栏的方法。
2009-7-26 Visual FoxPro 6.0程序设计 30
9.2.1 定义工具栏类如果要创建一个工具栏,要它包含己有工具栏所没有的按钮,
则可通过定义一个自定义工具栏类完成此任务。 VFP提供了一个工具栏基类,在此基础上可以创建所需的类。创建新类的方法在 5.4.5类的操作方法中已作详细的讲解。
定义了工具栏类以后,可向工具栏类添加对象,并为自定义工具栏定义属性、事件和方法程序,最后可将工具栏添加到表单集中。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 31
9.2.2 在表单集中添加自定义工具栏在定义一个工具栏类之后,便可以用这个类创建一个工具栏。
可以用“表单设计器”或者用编写代码的方法,将工具栏与表单对应起来。
1、在“表单设计器”中协调工具栏和表单可以在表单集中添加工具栏,让工具栏与表单集中的各个表单一起打开。但不能直接在某个表单中添加工具栏。使用“表单设计器”在表单集中添加工具栏的步骤如下:
( 1)先注册并选定包含工具栏类的类库。
( 2)打开要使用上述工具栏类的表单集,再从“表单控件”工具栏选择“查看类”,然后从显示的列表中选择该工具栏类。
( 3)从“表单控件”工具栏中选择工具栏类。
( 4)在“表单设计器”中单击,添加此工具栏,然后将工具栏拖动到适当的位置,VFP将在表单集上添加工具栏,如果表单集尚未打开,VFP将提示用户打开一个。
( 5)为工具栏及其按钮定义操作。
2009-7-26 Visual FoxPro 6.0程序设计 32
2、使用代码协调工具栏和表单除了使用“表单设计器”外,还可以使用代码在表单集中添加工具栏。如果要使用代码在表单集中添加工具栏,可以在表单集的 Init事件中,使用 SET CLASSLB命令,指定包含工具栏类的类库,然后在表单集中由此类创建工具栏。
例如,要添加并显示基于 _base类库中 _toolbar类的工具栏
mytoolbar,可以在表单集的 Init事件中添加下列代码:
SET CLASSLIB TO LIBS\_BASE
THIS.ADDOBJECT("MYTOOLBAR","_TOOLBAR")
THIS.MYTOOLBAR.SHOW
如果使用已经定义了的一个工具栏,如在第五章中定义的
NEWTOOLBAR工具栏,则可以在表单集的 Init事件添加如下代码:
SET CLASSLIB TO LIBS\NEWTOOLBAR ADDITIVE
THIS.ADDOBJECT("MYTOOLBAR","NEWTOOLBAR")
THIS.MYTOOLBAR.SHOW
注意,如果工具栏类没有定义工具栏及其按钮要执行的操作,那么必须在与工具栏及其按钮相关的事件过程中定义操作。
2009-7-26 Visual FoxPro 6.0程序设计 33
3、创建自定义工具栏示例可以在代码中定义工具栏的各个要素。例如,在第五章中定义的 NEWTOOLBAR工具栏没有指定工具栏及其按钮等要执行的操作,现以该工具栏添加到表单集为例,说明其方法。先在表单集的 Init事件中添加下列代码,当加载表单集时,VFP将创建并显示代码中定义的工具栏,该工具栏如图:
SET CLASSLIB TO LIBS\NEWTOOLBAR ADDITIVE
THIS.ADDOBJECT("MYTOOLBAR","NEWTOOLBAR")
THIS.MYTOOLBAR.SHOW
对 NEWTOOLBAR工具栏中各控件的执行代码定义的步骤及代码如下:
( 1)选择“项目管理器”中的“类”选项卡。
( 2)找到并选择以前定义的 NEWTOOLBAR类。
( 3)单击“项目管理器”的 【 修改 】 按钮。
2009-7-26 Visual FoxPro 6.0程序设计 34
( 4)分控件进行代码设计。
■对 Combo1组合框的代码进行定义:
●选择 Combo1控件,在“属性”中选择“其它”选项卡,将
Enabled属性设为“假” 。(在表单集中不设文章排版)。
■对 Combo2组合框的代码进行定义:
● 选择 Combo2控件,在,属性,中选择,数据,选项卡,将
RowSourceType属性设为,1-值,,将 RowSource属性设为 宋体,
黑体,仿宋,楷体 ( 还可以添加其它 VFP能识别的字体名 ) 。 设置初始值,将 Value属性设为 ="宋体 "。
● 选择,方法程序,选项卡,双击 Click Event,在弹出的代码编辑框中写入如下代码:
THISFORMSET.ActiveForm.ActiveControl.FontName=THIS.VALUE
2009-7-26 Visual FoxPro 6.0程序设计 35
■ 对 Combo3组合框的代码进行定义:
●在上一步的方法程序编辑框中,从“对象”后的组合框中选择
Combo3,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontSize=;
VAL(ALLTRIM(THIS.VALUE))
● 在“属性”中的对象选择框中选择 Combo3对象,再选择“数据”选项卡,将 RowSourceType属性设为,1-值”,将 RowSource
属性设为 8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72。设置初始值,将 Value属性设为 ="9"。
■对 Command1命令按钮的代码进行定义:
在上一步的方法程序编辑框中,从“对象”后的组合框中选择
Command1对象,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontBold=;
!THISFORMSET.ActiveForm.ActiveControl.FontBold
THIS.FontBold=THISFORMSET.ActiveForm.ActiveControl.FontBold
■ 对 Command2命令按钮的代码进行定义:
2009-7-26 Visual FoxPro 6.0程序设计 36
在上一步的方法程序编辑框中,从“对象”后的组合框中选择
Command2对象,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontItalic=;
!THISFORMSET.ActiveForm.ActiveControl.FontItalic
THIS.FontItalic=THISFORMSET.ActiveForm.ActiveControl.FontItalic
■ 对 Command3命令按钮的代码进行定义:
在上一步的方法程序编辑框中,从,对象,后的组合框中选择
Command3对象,然后在 Click Event方法程序编辑框中输入如下的代码:
THISFORMSET.ActiveForm.ActiveControl.FontUnderline=;
!THISFORMSET.ActiveForm.ActiveControl.FontUnderline
THIS.FontUnderline=THISFORMSET.ActiveForm.ActiveControl.FontUnderline
到此,对类设计定义完成,可关闭,方法程序编辑框,,关闭
,类设计器,并将所做修改保存 。
2009-7-26 Visual FoxPro 6.0程序设计 37
将该工具栏加入到 Student表单集运行后,选择表单上的“说明”
后面的编辑框对象,进行图中工具栏状态设置后(黑体,12磅字号、粗斜体、加下划线)的结果:
返 回
2009-7-26 Visual FoxPro 6.0程序设计 38
小 结
1、进行菜单系统设计前应先做好规划:
①按要执行的任务组织系统:即菜单系统中要设计哪几个菜单笺以及菜单笺在菜单系统中的顺序;
②每个菜单笺中应设置的菜单项以及菜单项的先后顺序,菜单项是否分组;
③菜单笺以及菜单项的中文名,访问键和键盘快捷键设置和定义;
④为菜单项指定任务,可以使用命令、菜单项、过程等;
⑤设置菜单的启用和废止条件以及菜单的说明信息。
2、使用“菜单设计器”根据所规划的菜单系统定义菜单系统:
①先设计菜单笺(包含中文名、先后顺序、访问键、启用及废止条件等);
②再设计菜单项(包含中文名、先后顺序、分隔线、快捷键、启用及废止条件、菜单项信息、菜单项应执行的任务等)。
3、使用“快捷菜单设计器”设计快捷菜单并在表单中包含快捷菜单或者在表单类中包含调用快捷菜单的命令。
4、使用“快速菜 单”设计系统菜单。
5、菜单设计完成后要生成菜单文件(,mpr文件)。
6、自定义工具栏,并在表单集中通过注册类的方法或在表单集的 Init事件中使用命令的方法添加自定义工具栏。
返 回
2009-7-26 Visual FoxPro 6.0程序设计 39