200 likes | 361 Views
第九章 菜单与工具栏的设计与应用. 教学内容: 一、 VFP 菜单系统结构 二、下拉式菜单的设计与使用 三、快捷菜单的设计与使用 四、工具栏的建立和应用 教学重点: 菜单设计的具体操作 教学难点: 菜单设计的具体操作. 一、 VFP 菜单系统结构. 1 、菜单的常见功能. 一、 VFP 菜单系统结构. 2 、下拉式菜单的结构. 图 9-3 菜单实例. 图 9-4 建立菜单主选项. 二、下拉式菜单的设计与使用. 1 、菜单设计的基本过程. 例 1 :建立如图所示菜单的主选项,并保存为文件 cd1.mnx 。. 图 9-2 菜单设计器窗口.
E N D
第九章菜单与工具栏的设计与应用 教学内容: 一、VFP菜单系统结构 二、下拉式菜单的设计与使用 三、快捷菜单的设计与使用 四、工具栏的建立和应用 教学重点:菜单设计的具体操作 教学难点:菜单设计的具体操作
一、VFP菜单系统结构 1、菜单的常见功能
一、VFP菜单系统结构 2、下拉式菜单的结构
图9-3 菜单实例 图9-4 建立菜单主选项 二、下拉式菜单的设计与使用 1、菜单设计的基本过程 例1:建立如图所示菜单的主选项,并保存为文件cd1.mnx。
图9-2 菜单设计器窗口 二、下拉式菜单的设计与使用 (1)调用菜单设计器 菜单法:使用“新建”工具或菜单 命令法:CREATE MENU 菜单文件名 (2)菜单设计器的使用: “菜单名称”:指定显示在菜单中的选项名称。当有多个选项时,“菜单名称”列左边的双向箭头允许用鼠标拖动调整顺序。 “结果”:指定在选择菜单项时发生的动作类型,可以是命令、填充名称、子菜单和过程。 “选项”按钮:可以进入“提示选项”对话框,在此可定义键盘快捷键和其他菜单选项。 “菜单级”下拉列表:用于选择处理的菜单或子菜单。 “插入”:用于在菜单设计器窗口中插入新选项。“插入栏”仅在编辑子菜单时有效,用于将一个系统菜单栏插入菜单中。 “预览”按钮:显示正在创建的菜单。
二、下拉式菜单的设计与使用 (2)菜单设计器的使用: 菜单名和热键设置 菜单名称: \<字母——热键,\- ——分隔线
二、下拉式菜单的设计与使用 (2)菜单设计器的使用: “结果”列:用于设定该菜单选项被选取时要执行的动作。系统预设的动作都是“子菜单”,可以用下拉列表选择其他动作。每个选项的含义如下: 1)命令:表示要执行一条VFP的命令。可以把要执行的命令输入右边的空白方框中。例如“退出”选项实现退出应用程序,返回VFP主窗口,选择“结果”为“命令”,在其后的编辑框中输入:SET SYSMENU TO DEFAULT,表示结束应用程序的菜单运行,显示VFP 的系统菜单。 2)填充名称:输入一个系统定义的或系统使用的菜单名。在子菜单中该项显示为Bar#。 3)子菜单:表示此选项下还有下一层菜单。选取时,右方出现“创建”按钮,单击后出现另一层的相同的设计界面,可设计下一层的菜单,如此能一层一层地建立出分层的菜单选项。 4)过程:与“命令”选项类似,不同的是这里可以输入许多条命令,当选取此选项时,这一串命令将会被顺序执行。
二、下拉式菜单的设计与使用 (2)菜单设计器的使用: 设定“选项” 在菜单设计器窗口中,当选中某一菜单项时,其右方的“选项”处会出现一个灰色的按钮,单击后弹出“提示选项”对话框。 (1)快捷方式 设定此菜单项的快捷键。例如,在编辑中经常使用的Ctrl+C为“复制”功能的快捷键。在提示选项中设置快捷键的方法:只需在将光标移到“键标签”框中并按下要使用的快捷键,VFP便会记录它们。 (2)跳过选项 此选项用来判断其右方的条件表达式的结果,若执行菜单时条件表达式结果为.T.,则此菜单项就会变为灰色字体而无法选取,表示此选项无效。要注意的是在预览中无法显示出此项功能,必须在执行菜单时才会执行条件的判断。 (3)信息 此处的文字将显示在窗口的状态栏上,作为选取该选项时的提示信息。例如,为“浏览”选项输入提示信息“浏览数据记录”,则选中该项时,状态栏显示结果如图9-7所示。 (4)主菜单名 在这里输入选项的名称,用来判断在程序中是否选择该选项。若是在子菜单选项,此选项变为“菜单项#”,可在其中设定此选项的编号,以便在程序中判断是否选取了它,设定的值必须为数字。 (5)备注:设定注解,用来作为解释。
图9-8 “生成菜单”对话框 二、下拉式菜单的设计与使用 (3) 存储并执行菜单 当菜单设计完成以后,必须先保存为菜单文件,VFP中菜单文件默认扩展名为.MNX,保存后才能执行此菜单。 保存菜单:“文件”→保存”。 运行菜单: 1)在项目管理器中选择“其他”→单击右边的“运行”按钮。 2)在菜单设计器中打开菜单,并选取命令“菜单/生成”选项,单击“生成”按钮会生成扩展名为.MPR的菜单程序文件,在命令窗口中输入命令: DO <菜单文件名>.MPR 由于没有为菜单选项设定程序代码,运行菜单时选取菜单选项没有任何动作。
二、下拉式菜单的设计与使用 (4)菜单选项代码 此处列出设置菜单选项代码时的常用命令,以供参考。 •调用表单:DO FORM <表单文件名> •调用程序:DO <程序文件名> •调用查询:DO <查询文件名>.qpr •打印报表:REPORT FORM <报表文件名>TOPRINT •预览报表:REPORT FORM <报表文件名>PREVIEW •恢复系统菜单:SET SYSMENUTODEFAULT •退出VFP:QUIT
练习 1. 使用______可以将自定义工具栏添加到表单集中。 A.表单控件工具栏 √ B.报表设计器 C.项目管理器 D.菜单设计器 2. 设计一个菜单选项的功能为退出Visual FoxPro,则应设置其结果为命令,并在其后输入命令______。 A.EXIT B.QUIT C.SET SYSMENT TO DEFAULT D.THISFORM.RELEASE √ 3. 为菜单选项加入热键的方法是在菜单设计器中该选项的名称后加______。 A.该字母名称 B. \- √ C.\<字母 D.Ctrl+字母 4. 扩展名为mnx的文件是______。 A.备注文件 B.项目文件 C.表单文件 D.菜单文件 √ 5. 快捷菜单的调用代码通常设置与某个对象的______事件中。 A.Activate Event B.RightClick Event √ C.Init Event D.Destroy Event 6. 在“菜单设计器”中,“文件”菜单项的键盘访问键是F,在菜单名称中应该键入______。 A.文件F B.文件+F C.文件(\<F) √ D.F>文件
图9-15 “新建菜单”对话框 三、快捷菜单的设计与使用 快捷菜单是用户点击鼠标右键时弹出的菜单。快捷菜单设计好后必须生成菜单程序(扩展名为.mpr),然后设置在某个事件发生时调用它(一般是鼠标右击的事件)。 9.4.1 建立快捷菜单 “文件”→“新建”→“菜单” →“新建文件” →“快捷菜单” 9.4.2 调用快捷菜单 快捷菜单建立后,必须生成菜单程序( “菜单”→“生成” →单击“生成”按钮)然后就可以使用命令调用它。快捷菜单是在用户单击右键后出现的,因此快捷菜单的调用通常发生在某个对象的RightClick事件中。
三、快捷菜单的设计与使用 例1:为某表单的文本框设计快捷菜单,能实现对文本框内容的复制、剪切和粘贴。 1)新建一个快捷菜单(“文件”→“新建”→“菜单” →“新建文件” →“快捷菜单”),单击“插入栏”按钮,利用出现的“插入系统菜单栏”对话框,将系统菜单的复制、剪切和粘贴选项作为菜单选项插入。 2)将菜单保存为kjcd.mnx,并生成菜单程序文件kjcd.mpr。 3)在设计器中打开表单,选中需要弹出快捷菜单的文本框,设置其RightClick Event事件代码如下:Do kjcd.mpr 运行表单时,当在文本框中选中文本后右键单击时出现所设快捷菜单。
图9-19 新建类 四、工具栏的建立和应用 9.5.1 建立自定义工具栏 要建立自定义工具栏,可以从VFP的ToolBar类派生得到一个工具栏类,再利用表单设计器或程序方式向表单集或主窗口添加即可。 1.建立工具栏类 利用“文件/新建”→“类”选项,单击“新建”按钮建立一个新类;或在项目管理器中的“类”选项卡中建立一个新类。 在弹出的“新建类”对话框中设置类名,“派生于”选择Toolbar,并在“存储于”中指明该类存储于哪一个类文件中,如图9-19所示。设置完毕后单击“确定”按钮。
属性或方法名 说明 Caption 工具栏的标题 ControlBox 工具栏在运行时刻是否包含控制菜单框 Movable 在运行时刻用户是否可以移动工具栏 Name 工具栏的名称 ToolTipText 控件工具的提示文本 ShowTips 是否显示工具栏的提示文本 Sizeable 在运行时用户是否可以调整工具栏的大小 Dock 停放或移出工具栏 AfterDockEvent 工具栏停放后发生的动作 BeforeDockEvent 工具栏停放前发生的动作 四、工具栏的建立和应用 2.设计工具栏类 在打开的“类设计器”窗口中对myToolbar类进行设计,设计的方法与表单设计的方法类似:利用表单控件工具栏向其中加入命令按钮组或命令按钮对象,并定义其属性、编写按钮的Click 事件过程。 3.设置工具栏的属性及方法 在工具栏中添加了对象以后,可以设置工具栏的属性和方法。工具栏有28个属性,30个方法,表9-1说明了比较常用的属性和方法。
图9-20 包含工具栏的表单集 四、工具栏的建立和应用 4.将工具栏加到表单中 工具栏设计好以后,可将其放到表单集中。向表单集中添加工具栏有两种方法:一是利用表单设计器,另外可以利用程序代码。 (1)利用表单设计器 新建一个表单,在表单控件工具栏中单击“查看类”,在弹出的打开对话框中选择自定义工具栏的类文件,确定后可以看到表单控件工具中出现了刚才设计的类:myToolbar。使用添加控件的方法向表单中添加一个自定义工具栏对象。由于VFP只在表单集中添加工具栏,所以系统会出现提示信息:“要添加表单,需要一个表单集对象,创建一个吗?”选择“是”建立一个表单集。由此可见,工具栏是一类特殊的表单对象。 以上操作完成后,自定义工具栏就添加在表单集中了。保存并运行添加工具栏的表单集,自定义工具栏也随之运行,和VFP的工具栏一样,用户可以随意移动它的位置,表单的运行结果如图9-20所示。
四、工具栏的建立和应用 (2)利用程序代码 除了使用“表单设计器”以外,还可以使用程序代码在表单集中添加工具栏。方法是在表单集的Init 事件中使用如下命令: SET CLASSLIB TO工具栏类 THIS.ADDOBJECT('工具栏类库名','工具栏类名') THIS. .工具栏类库名.SHOW 9.5.2 向顶层表单中添加自定义工具栏 用普通的建立工具栏的方法给顶层表单添加工具栏,会发现工具栏不能正常显示。事实上,工具栏被顶层表单挡在后面了,即使你把顶层表单的SHOW WINDOW属性设置为“最上层表单”、把AlwaysOnTop属性设置为.T.也没用。这是因为工具栏是一种特殊的表单,而在VFP中除了应用程序对象_VFP和_SCREEN对象,没有其他任何表单的层级比顶层表单高。因此要给顶层表单程序添加工具栏,必须把工具栏做在顶层表单本身上。下面的例子说明了这种方法。
图9-21 设计自定义工具栏 图9-22 顶层表单中的自定义工具栏 四、工具栏的建立和应用 例9-5为顶层表单添加自定义工具栏。 操作步骤如下: 1)在类库MyVcx中建立一个工具栏类topToolBar, 将工具栏的ShowWindow属性设置为1—最上层表单, 如图9-21所示。 2)给顶层表单添加一个自定义属性formToolBar。 选择菜单“表单/新建属性”,出现“新建属性”对话框,在“名称”后输入属性名称:formToolbar。单击“添加”按钮,新的属性就添加到了表单属性对话框中。 3)在表单的Activate 事件中输入以下代码: THIS.formToolBar=NewObject("topToolBar","myVcx") THIS.formToolBar.show() THIS.formToolBar.dock(0) 保存并运行表单,结果如图9-22所示。
五、协调菜单与自定义工具栏 应用系统的菜单中通常包含了系统的大部分功能,如果某些菜单命令使用频繁,可创建自定义工具栏,包含那些频繁使用的菜单命令,这样用户在需要这些命令时只需简单地按动按钮就可以了。如果应用系统中既有菜单,又有工具栏,则需要使菜单命令和工具栏协调同步。例如,菜单项应执行与对应工具栏按钮相同的任务,另外,如果某个工具栏按钮禁用,则与它相应的菜单命令也应是灰色,不可选取。 要使菜单与工具栏相协调,需要做到: 1)无论用户使用工具栏按钮,还是使用与按钮相关联的菜单项,都执行同样的操作。 2)相关的工具栏按钮与菜单项具有相同的可用或不可用属性。 要达到以上目的,可遵循如下步骤: 1)通过定义工具栏类来创建工具栏,添加命令按钮,并将要执行的代码包括在对应于此命令按钮的Click 事件的方法程序中。 2)创建与之协调的菜单。在“菜单设计器”中,根据工具栏上的每个按钮创建对应的子菜单;设置子菜单项的“结果”为“命令”,并调用相关工具栏按钮的Click 事件对应的代码。 例如,如果工具栏按钮的名字为cmdA,表单文件名为myform,可以在子菜单项命令编辑框中添加如下代码: myform.toolbar.cmdA.Click
五、协调菜单与自定义工具栏 3)设置菜单与工具栏具有相同的禁用属性。单击菜单项的“选项”栏按钮,打开“提示选项”对话框,选择“跳过”。在“表达式生成器”中输入表达式,指出当工具栏命令按钮失效时,菜单应该为禁用状态。例如,如果工具栏按钮的名称为cmdA,可以在“跳过”框中输入如下代码: NOT myform.toolbar.cmdA.Enabled 按钮的状态可根据各个表单运行时所处的状态来确定,设置其Enabled属性为.T.(可用)或.F.(禁用)即可。 4)生成菜单程序。 5)把菜单添加到拥有工具栏的表单集中。若生成菜单的名字为mainmenu.mpr,则在表单集的初始化方法中添加如下代码: Do mainmenu.mpr with this 当用户打开菜单时,VFP计算“跳过”条件的值,如果相关的工具栏命令不可用,则菜单也不可用。当用户选择菜单项时,则执行相关工具栏命令的Click事件代码,保证了菜单与对应工具按钮执行相同的操作。