第九章菜单与工具栏【教学目的要求】1、掌握SQL菜单系统结构。2、掌握下拉式菜单和快捷菜单的设计与使用方法。3、掌握自定义工具栏的创建。4、培养学生的实际操作能力、解决实际问题的能力。【教学重点】掌握菜单的设计方法,并会进行实际创建【课时数】4学时【教学方法】讲授法、案例法、直观演示法、师生互动法。【教学过程】一个应用程序一般以菜单的形成列出其具有的功能,而用户则通过菜单调用应用程序的各种功能。本章首先介绍sql系统菜单的基本情况,然后介绍如何配置与定制系统菜单、如何设计下拉式菜单和快捷菜单。9.1菜单系统规划1.设计原则(1)根据用户任务组织菜单系统。(2)给每个菜单和菜单选项设置一个意义明了的标题。(3)按照估计的菜单项使用频率、逻辑顺序或字母顺序组织菜单项。(4)在菜单项的逻辑组之间放置分隔线。(5)给每个菜单和菜单选项设置热键或键盘快捷键。(6)将菜单上菜单项的数目限制在一个屏幕之内,如果超过了一屏,则应为其中一些菜单项创建子菜单。(7)在菜单项中混合使用大小写字母,只有强调时才全部使用大写字母。2.设计步骤(1)菜单系统规划。(2)建立菜单和子菜单。(3)将任务分派到菜单系统中。(4)生成菜单程序。(5)测试并运行菜单系统。9.2创建菜单利用系统菜单是用户调用sql系统功能的一种方式或途径。而了解sql系统菜单的结构、特点和行为,则是设计用户自己的菜单系统的基础。9.2.1菜单结构sql支持两种类型的菜单:条形菜单和弹出式菜单。每一个条形菜单都有一个内部名字和一组菜单选项,每个菜单选项都有一个名称(标题)和内部名字。每一个弹出式菜单出有一个内部名字和一组菜单选项,每个菜单选项则有一个名称(标题)和选项序号。菜单项的名称显示屏幕供用户识别,菜单及菜单项的内部名字或选项序号则用于在代码中引用。每一个菜单选项都可以选择地设置一个热键和一个快捷键。热键通常是一个字符,当菜单激活时,可以按菜单项的热键快速选择该菜单项。快捷键通常是ctrl键和另一个字符键组成的组合键。不管菜单是否激活,都可以通过快捷键选择相应的菜单选项。无论是哪种类型的菜单,当选择其中某个选项时都会有一定的动作。这个动作可以是下面三种情况中的一种:执行一条命令、执行一个过程和激活另一个菜单。典型的菜单系统一般是一个下拉式菜单,由一个条形菜单和一组弹出式菜单组成。其中条形菜单作为主菜单,弹出式菜单作为子菜单。当选择一个条形菜单选项时,激活相应的弹出式菜单。快捷菜单一般由一个或一组上下级的弹出式菜单组成。9.2.2系统菜单sql系统菜单是一个典型的菜单系统,其主菜单是一个条形菜单。条形菜单中觉选项的名称及内部名字如表9.1所示。条形菜单本身的内部名字为MSYSMENU,也可看作是整个菜单系统的名字。选择条形菜单中的每一个菜单项都会激活一个弹出式菜单,各弹出式菜单的内部名字如表9.2所示。表9.3是“编辑”菜单中常用选项名称和内部名字。表9.1主菜单(-MSYSMENU)常见选项选项名称内部名字文件-MSM-FILE编辑-MSM-EDIT显示-MSM-VIEW工具-MSM-TOOLS程序-MSM-PROG窗口-MSM-WINDO帮助-MSM-SYSTM表9.2弹出式菜单的内部名字弹出式菜单内部名字“文件”菜单-MFILE“编辑”菜单-MEDIT“显示”菜单-MVIEW“工具”菜单-MTOOLS“程序”菜单-MPROG“窗口”菜单-MWINDOW“帮助”菜单-MSYSTEM表9.3“编辑”菜单(-MEDIT)常用选项选项名称内部名字撤销-MED-UNDO重做-MED-REDO剪切-MED-CUT复制-MED-COPY粘贴-MED-PASTE清除-MED-CLEAR全部选定-MED-SLCTA查找…-MED-FIND替换…-MDE-REPL通过SETSYSSMENU命令可以允许或者禁止在程序执行访问系统菜单,也可以重新配置系统彩旦菜单:SETSYSMENUON|ON|OFF|AUTOMATIC|TO[《TANGCHU弹出式菜单名表》|TO[条形菜单项名表]|TO[DEFAULT|SAVE|NOSAVE说明:ON:允许程序执行时访问系统文件.OFF:禁止程序执行时访问系统菜单.AUTOMATIC:可使系统菜单显示出来,可访问系统菜单.TO弹出式菜单名表:重新配置系统菜单,以条形菜单项内部名表列出用的子菜单.例如,“SETSYSMENUTO–MFILE,-MWINDOW”将使系统菜单只保留“文件”和“窗口”两个子菜单。TO〈条形菜单项名表〉:重新配置系统菜单,以条形菜单项内部名表列出可用的子菜单。例如,上面的系统菜单配置命令也可以写成“SETSYSMENUTO–MSM-FILE,-MSM-WINDO”。TODEFAULT:将系统菜单恢复为缺省配置。SAVE:将当前的系统菜单配置指定为缺省配置。如果在执行了SETSYSMENUSAVE命令后,修改了系菜单,那么执行SETSYSMENUTODEFAULT命令,就可以恢复SETSYSMENUSAVE命令执行之前的菜单配置。NOSAVE:将缺省配置恢复成Sql系统菜单的标准配置。要将系统菜单恢复成标准配置,可先执行SETSYSMENUNOSAVE命令,然后执行SETSYSMENUTODEFAULT命令。不带参数的SETSYSMENUTO命令将屏蔽系统菜单,使系统菜单不可用。9.2.3定义菜单用菜单设计器设计下拉式菜单的基本过程如9.1所示.图9.1菜单设计的基本过程1、调用菜单设计器:如果要新建一个菜单,可按下列步骤调用菜单设计器:①选择“文件”菜单中的“新建”命令。②在“新建”对话框中选择“菜单”单选按纽,然后单击“新建文件”按钮。③在“新建菜单”对话框中选择“菜单”按钮。这样,屏幕上就会出现“菜单设计器”窗口。如果要用菜单设计器修改一个已有的菜单,可以从“文件”菜单中选择“打开”命令,打开一个菜单定义文件(.mnx文件),打开“菜单设计器”窗口。也可以用命令调用菜单设计器,打开“菜单设计器”窗口,进行菜单的建立或者修改。命令的格式如下:MODIFYMENU〈文件名〉命令中的〈文件名〉指定菜单定义文件,默认扩展名.mnx允许缺省.若文件名为新文件,则为建立菜单,否则为打开菜单。2.创建下拉菜单:“菜单设计器”窗口每页显示和定义一个菜单,可以是条形菜单(菜单栏),也可以是弹出式菜单(子菜单)。“菜单设计器”窗口打开时,首先显示和定义的条形菜单。窗口的左边是一个列表框,其中每一行定义当前菜单的一个菜单单项,包括“菜单名称”、“结果”和“选项”三列内容。①“菜单名称”列指定菜单单项名称,也称为标题,用于显示,并非内部名字。在指定菜单名称时,可以调置菜单项的访问键,方法是在要作为访问键的字符前加上“\”两个字符.如指定菜单项名称为“文件(\F)”,那么字母F即为该菜单项的访问键.可以根据各菜单项功能的相似性或相近性,将弹出式菜单项分组,如将剪切、复制、粘贴分为一组,将查找、替换分为一组等。系统提供的分组手段是在两组之间插入一条水平的分组线,方法是在相应行的“菜单名称”列上输入“\-”两字符。②“结果”列该列用于指定当用户选择该菜单项时的动作。单击该列将出现一个下拉列表框,有命令、过程、子菜单和填充名称或菜单项等四种选择。命令:选择此选项,列表框右侧会出现一个文本该。可以在文本框内输入一条具体的命令。当选择该菜单项时,将执行这条命令。过程:选择此选项,列表框右侧会出现“创建”命令按钮。单击“创建”按钮将打开一个文本编辑窗口,可以在其中输入和编辑过程代码。要注意,在输入过程代码时,不需要写入PROCEDURE语句。以后,当再单击“编辑”命令按钮可以打开文本编辑窗口以修改过程代码。当选择该菜单项时,将执行指定过程代码。子菜单:选择此选项,列表框左侧会出现“创建”或“编辑”命令按钮(第一次定义时为“创建”按钮,以后为“编辑”按钮)。单击“创建”或“编辑”按钮,“菜单设计器”窗口就切换到子菜单页,可以在其中定义子菜单。此时,窗口右上方的“菜单级”下拉列表框内会显示当前子菜单的内部名字。选择“菜单级”下拉列表框内的选项,可以返回到上级子菜单或最上层的条形菜单定义页面。默认的子菜单内部名字为上级菜单相应菜单项的标题,但可以重新指定。最上层的条形菜单不能指定内部名字,其在“菜单级”下拉列表框内显示为“菜单栏”。当选择该菜单项时,将激活指定的子菜单。填充名称或菜单项#:选择此选项,列表框右侧会出现一个文本框。可以在文本框内输入菜单项的内部名字或序号。若当前定义的菜单是长形菜单,该选项为“填充名称”,应指定菜单项的内部名字。若当前菜单为弹出式子菜单,该选项为“菜单项#”,应指定菜单项的序号。弹出式菜单的菜单项序号也可以指定为SQL系统菜单中某个菜单命令的内部名字,如“文件”菜单中“新建”命令的内部名字—MFI-NEW,此时,正在定义的菜单项功能就与相应的菜单命令功能相同2、创建快捷菜单:设计快捷菜单的操作步骤如下:(1)在“项目管理器”中,选择“其他”选项卡,再选择“菜单”。(2)单击“新建”按钮,屏幕显示“新建菜单”对话框。(3)在“新菜单”对话框中,单击“快捷菜单”按钮,系统进入“快捷菜单设计器”窗口。(4)在“菜单名称”栏中,输入快捷菜单的各个菜单项。(5)在“结果”选项中,择“过程”或“命令”,如果选择“命令”,右侧出现命令文本框,在其中输入相应的命令。(6)单击“创建”按钮,屏幕显示“过程”代码窗口。(7)在“过程”代码窗口中,输入过程代码。(8)关闭“过程”代码窗口。(9)生成菜单。在“菜单”中,选择“生成”命令,打开“生成菜单”对话框,选择输出文件的路径和文件名。(10)单击“生成”按钮,生成菜单。(11)编写调用快捷菜单的代码:在需要调用快捷菜单的对象中编写RightClick事件代码:DO菜单1.mpr3、生成菜单程序菜单定义文件存放着菜单的各项定义,但其本身是一个表文件,并不能够运行.这一步就是要根据菜单定义产生可执行的菜单程序文件(.mpr文件),方法是:在菜单设计器环境下,选择“菜单”菜单中的“生成”命令,然后在“生成菜单”以话框中指定菜单程序文件的名称和存放路径,最后单击“生成”按钮。4.运行菜单程序定义好了菜单后,还需要为各个菜单指定任务,使之与系统和各个功能模块挂起来。选择一个菜单或菜单项时,将执行相应的任务。1)指定命令为菜单或菜单项指定命令的操作步骤如下:(1)在“菜单名称”栏中,选择相应的菜单标题或菜单项。(2)在“结果”栏中,选择“命令”。(3)在“结果”栏右侧的“编辑”框中,输入相应的命令。2)指定过程为菜单或菜单项指定过程的操作步骤如下:(1)在“菜单名称”栏中,选择相应的菜单标题或菜单项。(2)在“结果”栏中,选择“过程”。“创建”按钮出现在列表的右侧。如果已定义了一个过程,则这里出现的是“编辑”按钮。(3)单击“创建”或“编辑”按钮,屏幕显示“编辑过程”窗口。(4)在窗口中,输入要执行的代码。下拉菜单的运行一般设置在主程序中,快捷菜单则在相应表单或控件的RightClick中调用。调用代码同执行一个程序文件相同,使用DO命令。例如:DO菜单文件名.mpr完整代码如下:DO菜单文件名.mprREADEVENTS9.3创建自定义工具栏一、用类设计器定义工具栏类单击文件菜单中的新建→选择类、新文件→给出自定义工具栏类名、基于toolbar、类库名→在类设计器中,将所需的命令按钮和分隔符依次添加到自定义工具栏上→在属性窗口中为每个按钮选择Picture和ToolTipText→双击各按钮→在代码窗口为各按钮的Click事件添加实现各项功能所需的代码→关闭窗口保存。二、用编程方式定义工具栏类单击文件菜单新建→选择程序、新文件→在程序编辑窗口中用DEFINE命令定义工具栏类,用ADDOBJECT命令添加对象,用PROCEDURE事件名命令为该事件名定义方法程序。三、为单集添加工具栏类表单击文件菜单新建→选择表单、新文件→单击表单控件上的查看类按钮→打开自定义类库→单击表单控件上的自定义工具