370 likes | 552 Views
第五章 菜单设计 5.1 下拉式菜单设计. 创建菜单的基本步骤 建立或打开菜单设计器: MODIFY MENU < 文件名 > 进行菜单设计 快速菜单 菜单设计器 — 设计并生成下拉式菜单与快捷菜单的工具 保存菜单定义:文件菜单的保存命令 生成菜单程序: “ 菜单 ” 菜单的生成命令 运行菜单程序:例如 DO CD.MPR 快速菜单 “ 菜单 ” 菜单的快速菜单命令. 菜单设计器 菜单项属性 菜单名称列:可定义访问键 结果列:命令、填充名称、子菜单、过程等 4 个选项
E N D
第五章 菜单设计5.1 下拉式菜单设计 • 创建菜单的基本步骤 • 建立或打开菜单设计器:MODIFY MENU <文件名> • 进行菜单设计 • 快速菜单 • 菜单设计器 —设计并生成下拉式菜单与快捷菜单的工具 • 保存菜单定义:文件菜单的保存命令 • 生成菜单程序:“菜单”菜单的生成命令 • 运行菜单程序:例如 DO CD.MPR • 快速菜单 “菜单”菜单的快速菜单命令
菜单设计器 • 菜单项属性 • 菜单名称列:可定义访问键 • 结果列:命令、填充名称、子菜单、过程等4个选项 • 选项列:可定义快捷键 ,设定浅色菜单项 ,显示状态栏信息 • 菜单级组合框:菜单切换 • 插入栏按钮:提供系统菜单项 • “显示”菜单 • 常规选项 • 菜单选项
[例5-2] 利用菜单设计器建立如图5.9所示的下拉式菜单, 并要求: (1) 打印菜单包括“设备表”和“设备价格表”两个菜单项。 (2) 数据维护菜单的“浏览记录”菜单项能用来打开一个设备浏览窗口 。
5.2 快捷菜单设计 调用程序: * e5-3.prg CLEAR ALL PUSH KEY CLEAR && 清除以前设置过的功能键 ON KEY LABEL RIGHTMOUSE DO e5-3.mpr && 设置鼠标右键为功能键,预置弹出式菜单 USE sb BROWSE && 打开浏览窗口 USE PUSH KEY CLEAR
第6章 表单设计基础6.1 表单向导 打开向导选取对话框:在工具菜单的向导子菜单中选定表单命令。
6.2 表单设计器 • 创建和运行表单的基本步骤 • 打开表单设计器 MODIFY FORM 〈文件名〉 • 对象操作与编码:表单设计器 ,数据环境设计器 ,表单控件工具栏 • 保存表单 • 运行表单:例如 DO FORM SBQ • 快速创建表单:表单菜单的快速表单命令
6.3 面向对象的程序设计方法 • 对象 • 控件 • 容器 • 属性 • 事件 • 方法程序
表6.4 VFP部分常见事件表 方法程序一例:Refresh方法程序 [Form.]Object.Refresh 功能: 重画表单或控件, 并刷新所有的值。
对象引用 • 对象引用规则 (1) 通常用以下引用关键字开头: THISFORMSET 表示当前表单集(表单集的概念参阅8.1.2节) THISFORM 表示当前表单 THIS 表示当前对象 (2) 引用格式: 引用关键字后跟一个点号,再写出被引用对象或者对象的属性,事件或方法程序。 例如: THIS.Caption && 本对象(表单或控件)的Caption属性 THISFORM.Cls && 本表单的Cls方法程序,清除表单中的图形和文本 THISFORM.Command1.Caption && 本表单的Command1命令按钮的Caption属性 THIS.Command1.Click && 本对象的Command1命令按钮的Click事件 (3) 控件也可引用包含它的容器,格式为: Control.Parent 其中Control表示控件, Parent表示容器。 例如THIS.Parent.Command1.Caption, 表示引用本对象的容器(例如表单)的Command1命令按钮的Caption属性。
编程方式设置属性值 属性值设置格式: ObjectName.Property[=Setting] 其中Setting为要设置的属性值。 例如, THIS.FontBold=.T. && 本对象文本以粗体显示 THIS.Parent.Caption = time() && 本对象的容器的caption属性设置为当前时间 [例6-4] 设计只含一个文本框控件的表单(见图6.17),要求逐次单击文本框的内部能轮流显示当前日期与时间,试写出设计步骤。 (1) 创建表单:往命令窗口键入命令MODIFY FORM rqsj,使显示rqsj表单设计器窗口。 (2)创建文本框: 单击表单控件工具栏中的文本框按钮,然后单击Form1表单窗口内某处,该处就会产生一个Text1文本框控件。 (3) 将表单的Caption属性改为“日期与时间”:单击表单窗口,属性窗口的组合框中便显示Form1在属性列表中选定Caption属性在文本框中输入日期与时间字样,按回车键后表单窗口的标题栏就会显示这些文字。
(4) 表单的Load事件代码的设置: 双击表单窗口打开代码编辑窗口在对象组合框中确定表单选项,并在过程组合框中确定Load事件选项在列表框中输入以下代码: PUBLIC i && Load事件在表单装入内存时触发,设置I为公共变量 (5) 文本框的Click事件代码编写如下: IF i=.T. && 变量I用于控制轮流显示 THISFORM.TEXT1.VALUE=DATE() && 本表单的文本框的值设置为当前日期 THISFORM.TEXT1.DateFormat=12 && 日期格式设置为年月日次序 THISFORM.TEXT1.DateMark="." && 年月日间隔符设置为点号 i=.F. && 触发Click事件I值就变反 ELSE THISFORM.TEXT1.VALUE=TIME() && 本表单的文本框的值设置为当前时间 i=.T. && 触发Click事件I值就变反 ENDIF
第7章 表单控件设计7.1 输出类控件 • 标签(Label) 属性选介 (1) 使标签区域自动调整为与标题文本大小一致:可将AutoSize属性设置为.T.。 (2) 使标签的标题竖排:先将WordWrap属性设置为.T.,然后在水平方向压缩标签区域迫使文字换行。 (3) 使标签与表单背景颜色一致:将BackStyle属性设置为0(透明) (4) 使标签带有边框:将BorderStyle属性设置为1(单选框) • 图象(Image)、线条(Line)与形状(Shape) 创建图象的步骤如下: 在表单上创建一个图象控件在属性窗口选定Picture属性,并通过文本框右侧的对话按钮选定一个图象, 该图象即显示在图象控件处。 线条控件用于在表单上画各种类型的线条,包括斜线、水平线和垂直线。 形状控件用于在表单上画出各种类型的形状,包括矩形、圆角矩形、正方形、圆角正方形,椭圆或圆。 表7.3 形状控件的形状设置
[例7-1] 设计如图7.1所示的应用程序封面。 (1) 创建表单FM.SCX。 (2) 在表单上创建标签和形状控件各1个。 (3) 设置属性:详见表7.4 (4) 将封面的文字置前于椭圆:选定Label1,然后在布局工具栏中选定“置前”按钮。若已置前,则该步骤可省。 (5) Form1的RightClick事件代码编写如下: THISFORM.Release && 右击表单执行Release方法程序,从内存释放该表单
7.2 输入类控件 • 文本框(Text) • 文本框的值Value属性 • 焦点 • 控件设置焦点方法程序格式:Control.SetFocus • 获得焦点事件(GotFocus Event) • 失去焦点事件(LostFocus Event) • 控件的数据绑定 • ControlSource属性 • 文本框生成器 • 编辑框(Edit)
列表框(List) • 列表框生成器 [例7-3] 在列表框中填充SB表的编号和名称两个字段,要求选定列表框的任一项,就能使文本框中显示编号字段值。 (1) 在表单中创建1个列表框控件和1个文本框控件。 (2) 打开列表框生成器——在列表项选项卡的“用此填充列表”组合框中选定“表或视图中的字段”选项——如图7.4(a1)所示,通过对话按钮选出SB表,然后将编号和名称字段从可用字段列表添入选定字段列表中—按确定按钮。 (3) List1的Interactive Change事件代码编写如下: THISFORM.Text1.Value=THIS.Value && 将列表框选项值赋给文本框 (a1)
表7.5 列表框、组合框控件的值源类型 • 组合框(Combo) • 下拉组合框Style属性值 0 • 下拉列表框 Style属性值1 • 控件值源的类型
[例7-4] 试用BMDM表的代码来修改SB表的部门字段。要求SB表在列表框显示, BMDM表在组合框显示;并且当列表框确定一个记录后,便可用组合框的选项来替代SB表的部门字段值。 (1) 在表单上创建2个标签,1个列表框和1个组合框。 (2) 在数据环境中添加SB表和BMDM。 注意,若存在关联联线则将它取消。 (3) 属性设置:见表7.7。 (4) Combo1的InteractiveChange 事件代码编写如下: THISFORM.LIST1.Refresh && 在组合框列表中选项并替代SB.部门后更新列表框的显示 (5) Form1的Init事件代码编写如下: THISFORM.Combo1.Enabled=.F. && 使初始时不能操作组合框,只可在列表框先确定记录 (6) List1的InteractiveChange 事件代码编写如下: THISFORM.Combo1.Enabled=.T. && 列表框操作后即允许组合框操作 (7) List1的Init事件代码编写如下: SET ORDER TO TAG 编号 && 使列表按设备编号次序显示(假定SB表中该索引标识已存在)
[例7-6] 在表单上创建1个组合框和1个文本框,要求如下: (1) 组合框的列表包含SB表的编号字段值。 (2) 能在组合框中为其列表键入新选项。 (3) 若选取组合框列表中的项(也可以是刚添入的新选项),便能将它送入文本框。 假定组合框和文本框已在表单上创建(图略),下面列出主要的属性和事件代码。 (1) Combo1属性设置 Style:0 (默认值,表示组合框类型为下拉组合框) RowSourceType: 6 (表示控件值源类型为字段) RowSource:SB.编号 (在数据环境中添加SB表后,就能在属性窗口选取字段) (2) Combo1的KeyPress事件代码编写如下: LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 13 && 按回车键则条件表达式返回.T. IF This.ListIndex=0 && 组合框列表中无此键入值返回.T.,才允许添加数据 THIS.RowSourceType=0 && 控件值源类型设置为可用AddItem方法程序添加数据 THIS.AddItem(THIS.DisplayValue) && 键入值添入列表末尾 THIS.Value=THIS.DisplayValue && 使键入值立即成为列表中的选项 INSERT INTO \vfpex\sb(编号) VALUES(THIS.DisplayValue) && INSERT-SQL命令在SB表末尾添加一个记录,并将键入值存入该记录的编号字段 THIS.RowSourceType=6 && 恢复控件值源类型为"字段" ENDIF ENDIF (3) Combo1的Interactive Change事件代码编写如下: THISFORM.Text1.Value=THIS.Value
微调控件(Spinner) • 属性选介 (1) Value:表示微调控件的当前值。 (2) KeyBoardHighValue:设定键盘输入数值高限。 (3) KeyBoardLowValue:设定键盘输入数值低限。 (4) SpinnerHighValue:设定按钮微调数值高限。 (5) SpinnerLowValue:设定按钮微调数值低限。 (6) Increment:设定按一次箭头按钮的增减数,默认为1.00。若设置为1.50 则增减数为1.5。 (7) InputMask:设置输入掩码。微调控件默认带两位小数,若只要整数可用输入掩码来限定,例如999999表示6位整数。若微调控件绑定到表的字段,则输入掩码位数不得小于字段宽度,否则将显示一串*号。 • 事件选介 (1) DownClick Event:按微调控件的向下按钮事件。 (2) UpClick Event:按微调控件的向上按钮事件。
7.3控制类控件 • 命令按钮(Command) [例7-7] 设计一个如图7.8所示的密码输入窗口, 要求最多允许输入3次密码。 (1) 创建一个表单,然后在其中创建标签和文本框各1个,命令按钮2个。 (2) 属性设置:见表7.8。 (3) Form1的Load事件代码编写如下: public i && i用于计算输入次数 i=0 (4) Command1的Click事件代码编写如下: i=i+1 IF THISFORM.Text1.Value='123456' && 文本框输入值与123456(预置的密码)比较 THISFORM.Release && 本表单从内存释放 ELSE IF i<3 && 允许输入3次 MESSAGEBOX('密码错,请重新输入!') THISFORM.Text1.Value='' && 为重新输入清空文本框 THISFORM.Text1.Setfocus && 使文本框获得焦点,就是使光标在其中闪烁 ELSE MESSAGEBOX('密码错,禁止进入系统!') THISFORM.Release ENDIF ENDIF
(5) Command2的Click事件代码编写如下: THISFORM.Release 表7.8 “密码输入”属性设置
命令按钮组(Commandgroup) • 命令按钮组生成器 • Click事件的判别 例如图7.11中,Commandgroup1的Click事件代码编写如下: DO CASE CASE THIS.Value =1 && 单击Command1命令按钮(下页)返回.T. IF recno()<reccount() && 防止下移出界 SKIP ENDIF THISFORM.Refresh CASE THIS.Value =2 && 单击Command2命令按钮(上页)返回.T. IF RECNO()>1 && 防止上移出界 SKIP -1 ENDIF THISFORM.Refresh CASE THIS.Value =3 && 单击Command3命令按钮(退出)返回.T. THISFORM.Release && 表单从内存释放 ENDCASE
复选框(Check) • 复选框的值 Value属性:0或.F.表示清除;1或.T.表示选定;2表示灰色状态。其中数字为默认值。 • 选项按钮组(Optiongroup) • 选项按钮的Value属性:1表示选定,0表示未选定。 • 选项按钮组的Value属性:表明被选定按钮的序号,默认为1。例如第2个按钮被选定时Value值为2。 • 选项按钮组生成器 [例7-11] 设计一个能编辑或浏览关于设备的4个数据库表的对话框, 界面要求如图7.12所示。 (1) 在表单上创建1个复选框和2个命令按钮。 (2) 数据环境设置:在数据环境中添加SB表,BMDM表,DX表和ZZ表。 表7.12 “选表编辑或浏览”部分属性设置
(3) 创建选项按钮组Optiongroup1:先在表单上创建一个选项按钮组,然后再利用选项按钮组生成器进行设置。 ① 打开选项组生成器对话框:用表单控件工具栏的选项按钮组按钮在表单中创建一个选项按钮组,右击选项按钮组并选定快捷菜单的生成器命令。 ② 在按钮选项卡(参阅图7.9)中进行设置:在微调控件中将按钮的数目置为4将表格标题列中4项依次改为设备表、部门表、大修表和增值表。 ③ 在布局选项卡中进行设置:将微调控件按钮间隔置为10按确定按钮关闭选项组生成器对话框将选项按钮组移到表单左部适当位置。 (4) 对其它控件的属性进行设置:见表7.12。 (5) Optiongroup1的Click事件代码编写如下: DO CASE CASE THIS.Value =1 && 选定Option1选项按钮(设备表)时返回.T. SELECT SB && 选择SB表所在工作区 CASE THIS.Value =2 && 选定Option2选项按钮(部门表)时返回.T. SELECT BMDM && 选择BMDM表所在工作区 CASE THIS.Value =3 && 选定Option3选项按钮(大修表)时返回.T. SELECT DX && 选择DX表所在工作区 CASE THIS.Value =4 && 选定Option4选项按钮(增值表)时返回.T. SELECT ZZ && 选择ZZ表所在工作区 ENDCASE (6) Command1的Click事件代码编写如下: * 确定 IF THISFORM.Check1.Value=1 && Check1被选定时返回.T. BROWSE && 可编辑数据 ELSE && 若Check1未选定 BROWS NOMODIFY NOAPPEND NODELETE && 仅可浏览,不可编辑 ENDIF (7) Command2的Click事件代码编写如下: * 退出 THISFORM.Release && 表单释放
7.4 容器类控件 • 表格(Grid) • 表格的组成 (1) 表格(Grid):由一或若干列组成。 (2) 列(Column):一列可显示表的一个字段,列由列标题和列控件组成。 (3) 列标题(Header1):默认显示字段名,允许修改。 (4) 列控件(例如Text1):一列必须设置一个列控件, 列控件默认为文本框。 • 创建表格控件 • 在数据环境中将表窗口的标题栏拖放到表单窗口 • 利用表格生成器创建 • 表格编辑
[例7-14] 设计一个如图7.16所示的表单,要求能按部门浏览所有设备数据。 (1) 创建表单,并在数据环境中建立如图7.17 所示4个表的两级一多关系。 (2) 在表单上创建1个下拉列表框,2个标签,3个表格。表格控件可从数据环境创建,即将数据环境中SB窗口的标题栏拖到表单释放,从而产生GrdSb表格。然后可用同样方法创建表格GrdDx和GrdZz,如图7.16所示。表格创建后按图调整好表格位置、大小与列宽。 (3) 如图7.16所示创建矩形框形状控件,然后选定格式菜单的置后命令。 (4) 属性设置:见表7.14。 (5) Combo1的Init事件: SELECT bmdm GO BOTTOM SKIP && 故意将记录指针移到出界,以使表格在表单运行之初显示空白 (6) Combo1的Click事件: THISFORM.Label2.Caption=THISFORM.Combo1.Value+"设备情况" && 标题例如“一车间设备情况”
页框(Pageframe) [例7-15] 在表单上创建一个如图7.18所示含有两个页面的页框,分别用来维护SB表和BMDM表。 (1) 在表单上创建一个页框。 (2) 在数据环境中添加SB表和BMDM表。 (3) 页面标题设置:在页框中选定Page1页面,将页面的Caption 值改为设备。以同样方法将Page2页面标题改为部门。 (4) 在页面中创建表格:在页框中选定设备页面,做一个从数据环境中SB窗口标题栏到设备页面的拖放动作,页面中就会显示关于SB表的表格。以同样方法在部门页面中创建关于BMDM 表的表格。
连接类 • ActiveX控件(Olecontrol) [例7-16] 用滑杆控件浏览设备表的设备名称,要求滑杆指向什么数值,就显示记录号为该数值的设备名。 (1) 在表单上创建1个文本框控件。 (2) 在表单上创建1个滑杆控件:从表单控件工具栏中选定ActiveX(Olecontrol)控件按钮——单击表单下部某处在插入对象对话框中选定“插入控件”选项按钮——在控件类型列表中选定Microsoft Slider Control,version 6.0选项——选定确定按钮返回表单窗口(见图7.20)。
(3) 在数据环境中添加SB表。 (4) 将Form1表单的Caption属性设置为浏览设备名称。 (5) Olecontrol1的Init事件代码编写如下: * 滑杆指针刻度范围按表的记录数设置 THIS.Min = 1 && 刻度值最小为1 THIS.Max = RECCOUNT() && 刻度值最大与记录个数相同 (6) Olecontrol1的MouseMove事件代码编写如下: LPARAMETERS button, shift, x, y * 移动滑杆指针来显示SB表的名称字段值 * Olecontrol1:滑杆控件的Name * THISFORM.Olecontrol1.Value:滑杆指针所在刻度的值 GO THISFORM.Olecontrol1.Value && 记录指针指向滑杆指针所在刻度 THISFORM.Text1.Value = 名称 && 文本框显示名称字段值
ActiveX绑定控件(Oleboundcontrol) [例7-17] 自制一个如图7.23所示的图象编辑器,要求能对SB表通用型字段中的图象进行浏览、修改、增入与替换。 (1) 在表单上创建OLE 绑定型控件、滑杆控件、命令按钮控件和形状控件各1个。 (2) 将形状控件置于OLE绑定型控件之后:选定形状控件,然后选定格式菜单的置后命令。 (3) 属性设置:见表7.15。 表7.15 “图象浏览器”属性设置
(4) Olecontrol1的Init事件代码编写如下: * 滑杆指针刻度范围按SB表记录数设置 THIS.Min = 1 THIS.Max = RECCOUNT() (5) Olecontrol1的MouseUp事件代码编写如下: LPARAMETERS button, shift, x, y GO THISFORM.Olecontrol1.Value && 记录指针指向滑杆指针所在刻度 THISFORM.Oleboundcontrol1.Refresh && 为使图象当场显示,刷新OLE绑定型控件的显示 (6) Command1的Click事件代码编写如下: * 既能向当前记录通用型字段增入图象,又能替换图象 tx=GETPICT() && 显示打开图片对话框,并返回用户选定的图象文件名 APPEND GENERAL sb.商标 FROM &tx && 从选定文件向当前记录的通用型字段代入Ole图象对象 THISFORM.Oleboundcontrol1.Refresh && 为使代入的图象当场显示,刷新OLE绑定型控件的显示