第五章菜单设计.ppt
第 五 章菜单设计,目 录,,6.1 创建菜单 6.2 菜单的设置 6.3 菜单项任务的指定 6.4 生成菜单程序 6.5 建立应用程序的实例,,,,,,,6.1.1 菜单的规划 6.1.2 新建菜单,6.1 创建菜单,,,菜单系统由菜单栏、菜单标题、菜单及菜单项组成,它通常处于程序的主窗口之中,是构成应用程序主框架的重要部分。我们可以将菜单的设计分为菜单规划、菜单创建、功能实现和程序生成四个步骤进行。,6.1.1 菜单的规划,在菜单制作之前,应就对将要制作的菜单作必要的规划。菜单规划是整个系统规划的一个重要部分,其目的是从整体上统一考虑菜单的结构和组成,设计出功能组织合理,标题简洁准确,风格良好的菜单。 规划菜单时,可参考下面的准则进行:,(1)合理地组织菜单。一个应用系统的结构复杂,功能多种多样,要对系统所能提供的功能,按所完成的任务进行合理的分类,分别组织在不同的子菜单当中,使用户能很容易地找到完成某项任务的操作选项。一定要从用户的角度来思考,不妨多听一下用户的意见和看法。,(2)菜单项的组织准则,既要考虑到与多数程序的菜单保持一致,也要考虑到用户的使用习惯。在子菜单的逻辑组中,菜单项的排列应考虑到菜单项的使用频率。使用频率高的在前,相同使用频率的可以按字母顺序或其他用户认可的顺序。,(3)菜单的标题要有意义,菜单项名要用语准确,简单明了,字数不宜太多,但也不能少到让人不知所云。尽量用日常用语或用户本专业的常用专业术语,不用计算机术语。,,(4)菜单的访问键以及快捷键的选择一要考虑到上一代(如果有的话)程序的选择,二要考虑到目前多数软件的自然约定选择,如用“Alt+F”作为“文件”的访问键,用“Ctrl+C”作为“复制”的快捷键等。,,(5)将菜单项的数目限制在一个屏幕之内,如果一行菜单超过一屏,则会给用户的操作带来不便。可以为其中的一些菜单项创建子菜单,或重新规划一下菜单项的分类。,(6)在菜单的不同逻辑组之间加入分隔线,以便于用户的选择。,(7)对英文的菜单,其菜单名称建议采用大小写混合字体,即菜单项的第一个字母用大写,其他字母用小写,以保持菜单的美观。对于需要特别强调的菜单项可以全部大写。,,6.1.2 新建菜单,新建菜单有两种途径:一是从“文件”菜单的“新建”窗口打开菜单设计器;二是从项目管理器打开菜单设计器。这里我们只看第二种途径。,1.启动菜单设计器,在项目管理器中选择“其他”选项页;选择“菜单”项,然后再按“新建”按钮,在屏幕上就会出现新建菜单窗口。这里有两个按钮:一个“菜单”按钮;一个是“快捷菜单”按钮(即单击右键时出现在鼠标指针处的菜单)。这里单击“菜单”按钮,就会打开菜单设计器,但是新打开时菜单编辑框中没有内容。,2.菜单设计器的组成,,,在菜单设计器中,最醒目的就是白色的菜单编辑区,这是我们编辑各级菜单的地方,这里实际上是一个多个菜单行的列表,当菜单行较多时会出现滚动条。通过框上面的提示以及每行中控件可以看到这里有以下项目:,(1) 菜单编辑区,每行开头都有一个带双向箭头的按钮,它用来调整各个菜单项的次序。使用方法是按住此按钮上下拖动。,① 移动按钮,显示在菜单上的名字,在这里可以完成菜单名的输入和修改。菜单名称中可以定义访问键,只要在字母前加“\”即可确定此字母为访问键,显示在菜单上时该字母带下划线。如果要在子菜单的逻辑分组间加一条分隔线,只要在菜单名称位置输入“\-”即可实现。,② 菜单名称,为该菜单项的类型,是一个下拉式列表。对于主菜单,其中有四个选项:命令、名称填充、子菜单(默认)和过程。当选择“命令”时,只能在后面的命令框中输入一条命令,用以确定此菜单项的指定任务;当选择“名称填充”时,表示此菜单项暂时不做确定;当选择“子菜单”时,即在此菜单项下还要建立下一级菜单;当选择“过程”时,表示此菜单将激活一个过程并且予以执行。 如果当前编辑的是子菜单,结果列表中有四个选项:命令、菜单项#、子菜单和过程。当选择为“菜单项#”时,可以在后面的文本框中输入相应的菜单名。,③ 结 果,根据前面“结果”列表的选择,按“创建”按钮时将会进入创建过程:如果“结果”选择了“命令”或“名称填充”,此位置将变成文本框,可以进行命令的输入;如果“结果”选择了“子菜单”,按“创建”按钮可以进行下一级菜单的编辑;如果选择了“过程”,将会立即打开过程编辑窗口,进行过程的编辑。如果已经编辑过此项内容,则按钮上的文字改变为“编辑”。,④ 创建或编辑,为一按钮,用来打开“提示选项”窗口,对此菜单项进行有关的设置。开始时按钮上为空白,当选项中作了设置后上面将出现一个“√”号。关于菜单项选项的设置以后再谈。 在菜单编辑框中逐行地定义菜单项的各个项目,从而完成当前级菜单的创建。,⑤ 选 项,由于菜单是层次结构的,最高层的菜单我们称为主菜单,它的下一层为主菜单的子菜单,还有子菜单的子菜单等等。这样在编辑中就有一个在主菜单以及各级子菜单间选择的问题。此菜单级就起这个作用。在下拉列表中列了当前菜单名和它向上各层的菜单名,从中选择某个菜单名后,可以直接跳到此级菜单去。子菜单的编辑方法与主菜单基本相同。,(2) “菜单级”下拉式列表,第一个是插入按钮,即在当前菜单行前插入一个新菜单行;第三个是删除按钮,即删除当前编辑的菜单行;第二个也为插入按钮,它可以打开一个插入系统菜单栏窗口,在此窗口的列表中,给出了大量的系统中常用的菜单项,必要时从中选择后可以插入到自己的菜单当中,以节省定义此类菜单项的时间。,(3) “菜单项”框中的三个按钮,按此按钮将进入预览状态,实际看一下所设计的菜单的效果。,(4) “预览” 按钮,,,,,6.2.1 菜单项的提示选项设置 6.2.2 菜单的常规选项 6.2.3 菜单的设置代码 6.2.4 菜单的清理代码,6.2 菜单的设置,,,,,6.2.1 菜单项的提示选项设置,在每个菜单项的后面都有一个“选项”按钮,按此按钮,就会打开该菜单项的“提示选项”窗口。在此窗口中有以下三项设置较为常用:,,通过菜单的快捷方式可以直接执行该菜单项所指定的任务。与访问键不同的是访问键是用键盘操作菜单,而快捷方式是不用启动菜单而直接用键盘命令执行菜单项规定的任务。设置的方法是把键标签的原文字清除,按下你所要设置的快捷方式键。如用Ctrl+X作为快捷方式时,只要同时按下这两个键即可。 键说明是在菜单项的右边出现的快捷键说明,如在键说明中输入的是“^X”,则此二字符将会在菜单项右边显示出来。,(1) 设置快捷方式,在提示选项中有一个“跳过”文本框,在这里可以设置此菜单项是启动还是关闭的条件。在此框中输入一个逻辑表达式,也可以按按钮“…”在表达式生成器中生成一个逻辑表达式。在菜单运行期间,系统会自动根据此表达式的“真”或“假”来决定该菜单是可用还是不可用。,(2) 设置菜单项的启动条件,在选择一个菜单项时,有时希望在状态行显示出有关的信息,可以在此框中输入一个字符型表达式,也可以按 “…”生成一个字符型表达式。如输入表达式““今天是”+Dtoc(Date())”后,运行菜单,当选择此菜单项时会在状态行显示出“今天是10/30/99”的信息,其中“10/30/99”是当天日期。,(3) 信息框的使用,,除以上选项外,“主菜单”用来确定主菜单中菜单项名,如果当前编辑的是子菜单,则是该项名为“菜单项#”,但是应注意“菜单项#”名只可以是一个数值型变量名,因为子菜单项名只可以用一个整数来表示。“位置”用来确定本菜单与OLE对象菜单(如果在菜单运行期间要运行一个OLE对象的话)的位置关系,只在主菜单中使用,在本菜单运行期间当用户要编辑一个OLE对象,此处用来确定本菜单项与对象菜单的相对位置。可以用默认值(无),即在对象编辑时本菜单项自动隐藏。,6.2.2 菜单的常规选项,所谓常规选项是指菜单运行时应做的必要的设置以及菜单位置的限定等,如菜单是加在VFP系统菜单的位置,是替换原菜单还是加在原菜单中某个子菜单之前或之后等,另外设置代码和清理代码的加入也是从这里完成的。,,打开菜单的常规选项方法如下: 用菜单编辑器将菜单打开,在系统菜单的“显示”子菜单中将增加“常规选项…”菜单项,选择此项,就打开了常规选项窗口。 在此窗口中可以从事两方面的工作:一是确定菜单的位置,二是加入菜单的有关代码。,菜单位置的确定:菜单运行时,它的默认位置是在Viasual FoxPro主窗口的系统菜单位置。和原菜单(如果在本菜单运行前还有菜单的话)的关系在“位置”框中确定: (1)替换原菜单; (2)追加在原菜单之后; (3)在某一个菜单栏之前; (4)在某一个菜单栏之后。对于后两种情况,可以从出现的下拉列表中选择一个菜单栏。,“顶层表单”复选框是指定本菜单是否允许在顶层表单(SDI,可以在用应用程序生成器生成应用程序架构时定制)上使用,如果未选择此项,则该菜单只能在VFP主窗口中使用。 代码添加:在此窗口中可以加入三种菜单的程序代码。一是菜单的过程,二是“设置”代码,三是“清理”代码。,,对于“过程”代码,是指选择主菜单项(横向菜单)时所执行的代码。但是应该注意到:只有还没有指定任务的菜单项才执行此过程的代码,如果已经指定了任务或建立起了子菜单,此过程将不会被执行。,另外:在系统的“显示”菜单栏中还有一个“菜单选项…”菜单项,可以定义那些还没有指定任务的菜单项所要做的工作。当设置了此过程后,选择子菜单中一个还未指定任务的菜单项时,会自动激发此过程的执行。,6.2.3 菜单的设置代码,设置代码是在生成的菜单源程序中菜单定义代码之前执行的程序部分,为菜单的打开作一些必要的准备。设置代码中可以包含创建环境的代码,定义有关的内存变量和给定它们的初值,有关文件的打开,以及用PUSH MENU命令把原菜单压入堆栈(注:如果对菜单位置设置为“替换”,则在运行菜单前自动关闭原系统菜单)等工作。,,,,,,,为菜单添加设置代码是从常规选项窗口进行的,常规选项窗口其中有一个“菜单代码”框,单击“设置 …”,就会在当前窗口后面打开设置代码编辑窗口,按“确定”按钮关闭“常规选项”窗口,激活设置代码窗口,进行设置代码的编辑。,,,,,,6.2.4 菜单的清理代码,清理代码是在生成的菜单源程序中菜单定义代码之后执行的程序部分,可以实现菜单的激发执行和执行结束时的一些善后工作。如菜单中所定义内存变量的释放,原菜单的恢复,环境的恢复等。另外,在这里可以加入一些自定义过程或函数。,,VFP中菜单的运行是通过事件循环机制来实现的,定义的菜单并不能直接执行,应通过一个Read Events命令将它激活并且进入事件循环状态。此命令可以加在调用菜单的程序(例如主程序中)中,也可以加在清理代码中。,,,如果把Read Events命令加在清理代码中,可放在它的开始位置,然后再加上其他的清理代码。如果原菜单是通过PUSH MENU命令压入堆栈的,这时就通过POP MENU命令退栈,以实现原菜单的恢复。另外,在实现关闭菜单功能的菜单项的指定任务过程中,加入一个结束事件循环的命令Clear Events,这样才不至于使菜单无法退出。,,,,如果在清理代码中加入了自定义过程或自定义函数,则在本菜单的运行期间是公共的,任何代码过程中都可以调用它们。但是如果菜单文件未被运行,使用这些自定义函数时就需要指定它们所在的文件: DO ProgName IN MenuFileName.Mpr 或以指定过程文件的方式把文件打开(不运行菜单): SET PROCEDURE TO MenuFileName.Mpr 来确定这些自定义过程或函数的位置。,6.3 菜单项任务的指定,6.3.1 指定菜单项要执行的命令 6.3.2 创建菜单项的过程,,,前面我们只是建起了一个菜单的构架,还没有指定让菜单做什么,即选择此菜单项时系统应执行的任务。,,6.3.1 指定菜单项要执行的命令,在菜单的编辑当中,当菜单项的“结果”列表选择为“命令”时,即说此菜单项的任务只用一条VFP命令就可完成,不必将它做成一个过程。这时在后面的命令文本框中直接输入要执行的命令即可。如指定“打印”菜单项的任务就是打开一个打印设置表单,则只需在命令文本框中输入命令“Do Form d:\人事管理\setprint.scx”即可实现。,,6.3.2 创建菜单项的过程,当菜单项的“结果”列表选择为“过程”时,是指该菜单的任务是执行一个过程。这时在后的文本框中将出现一个“创建”按钮,按此按钮,则出现此过程的编辑窗口,也称为过程编辑器,在此窗口中逐行输入过程的全部代码。例如在“退出”菜单项执行时,要用一个警告框提醒一下“您确实要退出菜单?”,按“确定”按钮时退出,按“取消”按钮时不退出,可以在过程编辑窗口中作。,6.4 生成菜单程序,6.4.1 菜单的预览 6.4.2 生成菜单程序 6.4.3 查看与修改菜单源代码程序,,,,6.4.1 菜单的预览,对于建立起来的菜单,不管是否指定了任务和作了有关的菜单设置,都可以随时预览菜单的实际效果。以便于及时的修改,最终达到满意为止。 菜单预览时只要点击菜单设计器中的“预览”按钮即可进入预览状态。这时系统菜单位置换成了当前设计的菜单,可以对它的各个菜单栏、各个菜单项进行选择测试,在一个预览提示小窗口中会显示出所选菜单的提示以及选择此项时要执行的命令。当按小窗口中的“确定”按钮时退出预览状态。,6.4.2 生成菜单程序,我们前面制作的菜单,被保存在一个扩展名为Mnx的文件当中,它不是一个可执行的,而真正可以执行的是由它生成的菜单源程序代码,该源程序文件是一个与它的前身主文件名相同,扩展名为Mpr的文本文件。在项目管理器中调试菜单时常直接运行菜单文件,实际上这时系统在运行前先自动生成了一次源代码程序,运行的是生成后的菜单源代码程序,而非前面制作的菜单。,,对于一个制作好的菜单,最后要生成源代码程序,生成的方法: 打开菜单设计器后,在系统菜单的“菜单”栏中有一个菜单项“生成…”,选择此项后会出现生成菜单窗口,在此窗口中要确定一个输出文件(即菜单的源代码文件名及其路径),此文件的扩展名必须是Mpr。按“生成”按钮时,开始生成菜单程序,并且在屏幕上出现生成进度提示窗口,直到完成生成过程。,6.4.3 查看与修改菜单源代码程序,生成的菜单源代码程序可以像打开一个命令文件一样把它打开,也可以对它进行修改和增加新内容,以满足应用程序的需要。 通过系统菜单的“文件”栏的“打开”项,可以把生成的菜单的源代码程序在命令文件编辑窗口显示出来。,,注意:在命令文件编辑窗口对生成的菜单源程序代码修改,对它的前身Mnx文件没有丝毫的影响,建议你任何修改菜单的工作,包括修改菜单文件中的自定义过程和函数,都通过菜单编辑器在它的Mnx文件中改动,只不过多生成一次菜单源代码程序而已。 菜单源代码的执行与命令文件完全一样。,9.5 建立应用程序的实例,9.5.1 VFP中建立应用 程 序的基本步骤 9.5.2 一个建立应用程序 系统的实例,,,前面我们讨论了菜单制作的全过程,现在通过一个应用程序的设计实例,来看它具体使用方法。并且我们通过该实例,向读者介绍形成一个完整的VFP6.0应用程序系统的过程和步骤。在这个应用程序系统的建立过程中,将会用到前面大部分章节的内容,读者可以在分析本题的过程的同时回顾前面所学过的知识。,9.5.1 VFP中建立应用 程序的基本步骤,VFP6.0有一个功能强大的应用程序生成向导,可以在建立项目时用它生成整个程序系统的框架,然后加入自己的程序组件,对其中的模块加以必要的改造,就可以构成自己的应用程序系统。,前面讨论了各种应用程序组件的建立,其最终目的还是建立应用程序系统。只有通过一个完善的应用程序系统,才能让用户方便快速的使用这些模块。要创建VFP应用程序系统,除用前面所讨论方法建立起数据库、数据关系、功能模块、查询以及报表等项目内容外,还有一项很重要的工作,就是把各个功能模块组合在一起,形成一个独立于VFP系统的完整的应用程序。,本章中介绍的程序菜单,可以担当起这一重任。但是还不够,还应补充一定的程序和进行必要的处理工作。然后进行应用程序的编译。 现在介绍如何建立一个典型的VFP应用程序。一般来讲,应用程序的建立需要以下步骤:构造应用程序框架、将文件添加到项目中、连编应用程序。,所谓应用程序的框架,是指构成整个系统的整体控制结构。包括系统的启动程序、初始化信息、封面、菜单系统等。在建立应用程序时,需要考虑设置应用程序的起始点、初始化环境、显示初始的用户界面、控制事件循环以及退出应用程序时恢复原始的开发环境。这些都可以反映在应用程序框架中。,,,1.构造应用程序框架,起始点指应用程序系统的起始执行程序,也称为应用程序的主文件。它可以是一个程序文件、表单或菜单。每当运行应用程序时,VFP将首先启动主文件,然后主文件再依次调用所要执行的应用程序组件。在一个项目当中,主文件是惟一的,可以通过以下方式设置应用程序的起始点:,(1) 设置起始点,,① 在“项目管理器”中,选择要设置为主文件的表单、程序或菜单。单击右键,在弹出的快捷菜单中选择“设置主文件”,则选定的文件就被设置成主文件。 ② 从“项目”菜单中选择“设置主文件”命令。,应用程序的主文件自动设置为“包含”。这样,在编译完应用程序之后,该文件作为只读文件处理。在主文件中可以完成以下的工作:,(2) 主文件中可以完成的工作,① 程序的运行环境默认为VFP开发环境。在应用程序的最终使用中,可以全部或部分地采用开发环境作为应用程序的运行环境。在主文件中,一般首先对应用程序的环境进行初始化,设置好该应用程序对环境的专门要求。将初始的环境设置保存起来,在启动代码中就为应用程序建立起特定的环境设置。,② 调用应用程序,如系统的封面、密码输入窗口、运行系统控制菜单等。系统可以通过菜单或其它方法对整个系统的功能进行总体控制,建立起事件循环机制,保证应用程序的正常运行。,,,,③ 在主文件中,还应加入一些程序执行结束时必要的膳后处理。如原工作环境的恢复、关闭应用程序中打开的文件、清除应用程序中设置的变量和临时文件、对本次的有关运行情况进行保存等。以使机器能从事其它的工作,使本应用程序下次能正常工作或继续这次的工作。,,在VFP6.0中有一个功能强大的应用程序生成向导,通过它可以在项目建立的开始先生成整个应用程序的框架,其中已经包括了一个应用程序的所有基本组件。只要再在其中加入自己的各种组件,把它们联接到应用程序的框架上,对应用程序框架进行必要的修改、补充,就可以建立起整个应用程序系统。,一个VFP项目包含许多独立的组件(如功能模块、数据库、视图、报表、类以及一些资源文件等等),一个文件若要被包含在一个应用程序中,必须添加到项目管理器中。这样,在编译应用程序时,VFP会在最终的应用程序中将该文件作为组件包含进来。许多文件,必须通过手工的方法事先将它加入到项目管理器中。否则将会在编译过程中出现错误,也不利于将来应用程序的发布。在项目管理器中添加文件的方法第四章中已经介绍。,,2.将文件添加到项目中,编译一个项目的最后一步是连编,单击项目管理器上的“连编”按钮调出“连编”对话框,从中选择“连编应用程序”(.APP)或“连编可执行文件”(.EXE)。在选项单选框中,选定“重新编译全部文件”,单击确定按钮,系统将开始连编。连编的结果是将本项目生成一个可直接运行的应用程序(扩展名为.APP),或者生成一个可执行程序(扩展名为.EXE)。,,,3.连遍应用程序,“.APP”文件需要VFP环境的支持才可以运行,而“.EXE”文件只需要和两个VFP动态连接库(Vfp6r.dll和Vfp6enu.dll)就可构成在WINDOWS 95/98下运行的完整环境。对于连编生成的EXE文件,在Windows下双击文件名就可以开始运行该应用程序系统。,,9.5.2 建立应用系统举例,【例9-1】某学校要建立一个人事管理系统,经过实际调查和对系统的综合分析,其功能结构如P296-图9-15所示。试按要求设计出该系统的菜单,并且建立起整个应用程序系统。(教材P295 【例9-1】),第九章结束,谢谢观看!,