330 likes | 601 Views
第五章 菜单设计. 第一节 下拉式菜单设计 第二节 弹出式菜单设计. 第五章 菜单设计. 本章开始介绍如何运用 VFP 的可视化工具来设计所需要的界面和报表,首先介绍下拉式菜单和快捷菜单设计。 5.1 下拉式菜单设计 5.1.1 菜单生成的基本步骤 一、打开菜单设计器窗口 1 、通过系统菜单来建立或打开 ( 1 )菜单的建立 “ 文件 ” 菜单 “ 新建 ” 命令→在新建对话框选定 “ 菜单 ” 选项→ “ 新建文件 ” 按钮→出现如图所示新菜单对话框. 5.1.1 菜单生成的基本步骤. ( 2 )菜单的打开
E N D
第五章 菜单设计 第一节 下拉式菜单设计 第二节 弹出式菜单设计
第五章 菜单设计 本章开始介绍如何运用VFP的可视化工具来设计所需要的界面和报表,首先介绍下拉式菜单和快捷菜单设计。 5.1 下拉式菜单设计 5.1.1 菜单生成的基本步骤 一、打开菜单设计器窗口 1、通过系统菜单来建立或打开 (1)菜单的建立 “文件”菜单“新建”命令→在新建对话框选定“菜单”选项→“新建文件”按钮→出现如图所示新菜单对话框
5.1.1 菜单生成的基本步骤 (2)菜单的打开 “文件”菜单“打开”命令→在打开对话框的文件类型组合框选定“菜单”选项→在文件列表选定某菜单文件→按“确定”按钮→出现菜单设计器窗口或快捷菜单设计器窗口 2、用命令建立或打开 MODIFY MENU <文件名> 菜单文件扩展名为.MNX,此处准许缺省 文件名为新名称时为建立,否则为打开
5.1.1 菜单生成的基本步骤 3、通过项目管理器打开或建立 新建或打开项目管理器→在项目管理器窗口”其它“之 “菜单”选项 →选定“新建”按钮,打开菜单设计器窗口建立菜单 →选定“添加”按钮,选定加入某已有菜单,按“修改” 按钮打开菜单设计器窗口。 二、菜单设计 菜单设计器窗口打开后,系统菜单会增加一个“菜单” 之菜单选项,“显示”菜单也会增加两个命令,供用户使用 见下页图。
三、保存菜单定义 菜单设计或修改结束、菜单设计窗口未关闭前可用如下四种方法保存菜单定义 (1)单击菜单设计窗口的“关闭”按钮,按要求应答 (2)按Ctrl+W (3)系统菜单中“文件”菜单“保存”命令,保存菜单定义但不关闭菜单设计窗口 (4)在未保存 菜单定义的情况 下,在生成菜单 程序时会出现如 右询问窗口。 注意:菜单文件扩展名.MNX,菜单备注文件扩展名.MNT
四、生成菜单程序 “菜单”菜单“生成”命令出现生成菜单对话框 用户单击“生成”按钮(默认文件名)或修改菜单文件 名后按“生成”按钮,将生成菜单程序 菜单程序主名与菜单定义文件相同,扩展名为.MPR
五、运行菜单程序 DO <菜单程序主名>.MPR 在运行菜单程序时,VFP会自动对新建或修改后 的.MPR文件进行编译产生目标程序.MPX,程序真正运 行的是编译后产生的目标程序.MPX。 .MPR不可省略
5.1.2 快速菜单命令 系统菜单的“菜单” 选项之“快速菜单”命令,VFP系统系统菜单自动复制到菜单设计器窗口(菜单设计器窗口为空时),用户可在此基础上进行修改。注:仅可用于下拉式菜单,不能用于快捷菜单。 [P162 例5-1] (1)打开菜单设计器窗口:命令窗口键入MODIFY MENU cd,出现“新建菜单”对话框后,选定“菜单”选项。 (2)出现菜单设计器窗口后,选定“菜单” 选项之“快速菜单”命令,VFP系统系统菜单自动复制到菜单设计器窗口,如下页图所示
(3)生成菜单程序:选定“菜单” 选项之“生成”命令→在“保存文件”确认框选定“保存”按钮,保存菜单文件至cd.MNX和菜单备注文件cd.MNT →在“生成菜单”对话框选定“生成”按钮,产生菜单程序cd.MPR
(5)运行菜单程序:DO cd.MPR 恢复系统菜单键入如下命令 SET SYSMENU TO DEFAULT 生成的菜单可根据需要进行必要的修改
5.1.3 菜单设计器窗口 下级菜单到上级菜单的切换 插入菜单项 菜单列表框,一个菜单项占一行 删除菜单项 菜单模拟显示
5.1.3 菜单设计器窗口 一、“菜单名称”列 输入菜单项名称,该名称只用来显示。 可定义访问键,格式为(\<字母),只要按下访问键就执行菜单项功能。 二、“结果”列 定义菜单的性质,分为如下4个选项 1、命令 为菜单项定义一条动作命令,命令输入到其右边的文本框 2、过程 为菜单项定义一条动作过程,该过程可在按“创建”或“编辑”按钮后呈现的文本框内输入。 访问键为Alt+ <字母>
二、“结果”列 3、子菜单 为菜单项定义下一级菜单,在按“创建”或“编辑”按 钮后,菜单设计器切换到子菜单页,供用户建立和修改 子菜单。 在子菜单页,选择右上角菜单级组合框“菜单栏”选 项返回上一级菜单。 4、填充名称或菜单项# 让用户为菜单项第一级菜单的名称(填充名称)或 子菜单序号(菜单项#) ,名称或序号可在右边呈现的 文本框内输入。
三、“选项”列 每个菜单行都有一个无符号按钮,如下所示 按动该按钮,提示选项对话框,定义菜单项的附加功能 无符号按钮
快捷键定义,光标定位该框,按组合键即可 定义菜单项跳过条件,当其为真,则该菜单项以浅色显示 设置菜单项说明信息,但必须用引号括起来
5.1.4 “显示”菜单的命令 菜单设计器打开后, “显示”菜单增加两条命令 一、常规选项 选定常规选项命令,出现常规选项对话框,内含一框二区
为第一级菜单中未定义过任何命令或过程的菜单项定义公共过程为第一级菜单中未定义过任何命令或过程的菜单项定义公共过程 缺省选项,以用户定义菜单取代系统菜单 用户定义的菜单追加在当前菜单之右 输入菜单程序的初始化代码,位于菜单程序首部 输入菜单程序的清理代码,位于菜单程序尾部
用户定义的菜单添加到某菜单项的前面 用户定义的菜单添加到某菜单项的后面 某菜单项的选择组合框
5.2 弹出式菜单设计 5.2.1 用菜单设计器设计快捷菜单 快捷菜单是一种单击右键才出现的弹出式菜单 弹出快捷菜单的命令: ON KEY LABEL RIGHTMOUSE DO <快捷菜单文件> [P168 例5-3] (1)打开快捷菜单设计器窗口: “文件”菜单“新建”命令→在新建对话框选定“菜单”选项→“新建文件”按钮→在新菜单对话框选定“快捷菜单”按钮,将出现快捷菜单设计器窗口,设计快捷菜单
(2)插入系统菜单 在快捷菜单设计器窗口选定“插入栏”按钮→出现下页图所示“插入系统菜单栏”对话框. 选定“粘贴”选项,并按“插入”按钮 类似地插入复制、剪切、撤消选项 按“关闭”按钮返回快捷菜单设计器窗口。 此时的快捷菜单设计器窗口如下页图所示
(3)生成菜单程序 “菜单”菜单“生成”命令→保存文件时菜单文件主名取为E5-3, 菜单保存在E5-3.MNX,菜单备注保存在E5-3.MNT →在生成菜单对话框单击“生成”按钮→将生成菜单程序E5-3.MPR
(4) 编写如下调用程序 clear all push key clear && 清除以前设置过的功能键 * 设置鼠标右键为功能键,预制弹出式菜单 on key label rightmouse do e5-3.mpr use sb browse && 打开浏览窗口 use push key clear (5)运行调用程序及快捷菜单 do e5-3,出现浏览器窗口后,单击 鼠标右键,出现如图快捷菜单
5.2.1 用菜单命令为弹出式菜单编程 利用菜单编程命令可以设计出各种各样的弹出式菜单 一、定义弹出式系统 DEFINE POPUP <弹出式菜单名> [TITLE <字符表达式1>] [FROM <行坐标1,列坐标1>] [TO <行坐标2,列坐标2>] [IN [WINDOW] <窗口名>|IN SCREEN] [KEY <键标号>] 右下角坐标 菜单标题 菜单名称 左上角坐标,省略(0,0) 设置快捷键{Ctrl+字母} 窗口名指定菜单窗口的父窗口,SCREEN表示父窗口为VFP主窗口
一次使用户选定多个菜单项,被选中行变深色 为菜单项的标记留出一定空间 使第一个选项左边出现双向箭头,鼠标拖动可改变菜单项的顺序 [MARGIN] [MESSAGE <字符表达式>] [MOVER] [MULTISELECT] [PROMPT FIELD <表达式>|PROMPT FILES [LIKE <通配符表达式>] |PROMPT STRUCTURE] [SCROLL] 用来定义一个表结构的所有字段名列表 以字段为内容的滚动列表,该子句不能与MULTISELECT和MOVER一同使用 以磁盘文件名列表,文件名用通配符表达式来指定 在组合框增加滚动条
二、定义弹出式菜单的菜单项 指定菜单 DEFINE BAR <数值表达式1> OF <弹出式菜单名> PROMPT <字符表达式1> [BEFORE <数值表达式2 > |AFTER <数值表达式3>] [KEY <键标号>[,<字符表达式2>]] [MESSAGE<字符表达式3>] [SKIP [FOR <逻辑表达式>]] 菜单项序号 把菜单项放在其指定的菜单项之后 菜单项显示名 把菜单项放在其指定的菜单项之前 逻辑表达式为真跳过该菜单项
三、定义弹出式菜单菜单项的动作 格式1:把菜单项的动作定义为激活另一个菜单 ON BAR <数值表达式> OF <弹出式菜单名1> [ACTIVATE POPUP <弹出式菜单名2 >] 格式2:选择数值表达式表示的菜单项后就执行命令 ON SELECTION BAR <数值表达式> OF <弹出式菜单名> [<命令>] 格式3:选择由<弹出式菜单名>所代表的菜单中的任一项后均行命令 ON SELECTION POPUP <弹出式菜单名>|ALL [<命令>] 指所有已经激活的弹出式菜单中的任一项
四、激活弹出式菜单 左上角坐标,优先级高于DEFINE命令中FROM 激活由<弹出式菜单名>指定的菜单 ACTIVATE POPUP <弹出式菜单名> [AT <行坐标,列坐标>] [BAR <数值表达式>] [NOWAIT] [REST] 所激活菜单的当前菜单项的序号 菜单激活后程序继续执行 若菜单定义PROMPT FIELDS子句,则使表当前记录的字段内容成为当前可选项)
[P172 例5-4] clear define popup bb margin title dtoc(date()) from 10,30 define bar 1 of bb prompt ' 月报表 ' key CTRL+Y,'^Y' define bar 2 of bb prompt ' 季报表 ' key CTRL+J,'^J' define bar 3 of bb prompt ' 年报表 ' key CTRL+n,'^N' on selection bar 1 of bb ?"DO p1" on selection bar 2 of bb ?"DO p2" on selection bar 3 of bb ?"DO p3" activate popup bb 运行后如图所示
[P172 例5-5] clear m='' && 用来存储选项序列 define popup jj from 5,5 multiselect ; margin title ‘四季月份’ * 定义多选型弹出菜单选项 define bar 1 of jj prompt '春' define bar 2 of jj prompt '夏' define bar 3 of jj prompt '秋' define bar 4 of jj prompt '冬' on selection popup jj do xz * 过程被所有选项共用 activate popup jj
for j=1 to len(m) do case case subs(m,j,1)='1' ?'3-5月' case subs(m,j,1)='2' ?'6-8月' case subs(m,j,1)='3' ?'9-11月' case subs(m,j,1)='3' ?'12-2月' endcase next
运行结果 procedure xz for i=1 to 4 && 产生选项序列 if mrkbar('jj',i)=.T. and not str(i,1)$m * i表示所选菜单选项的序号 m=m+str(i,1) &&选项号添入选项序列后 endif next $: 包含 左字符串是右字符串的子串为真
[P173 例5-6] use sb define popup sbzd from 5,5 to 11,22 scroll prompt structure on selection popup sbzd do ts activate popup sbzd procedure ts do case case bar()=1 ? prmbar('sbzd',1) case bar()=2 ? prmbar('sbzd',2) otherwise ?"其余" endcase