第九章 菜单、工具栏和类设计_第1页
第九章 菜单、工具栏和类设计_第2页
第九章 菜单、工具栏和类设计_第3页
第九章 菜单、工具栏和类设计_第4页
第九章 菜单、工具栏和类设计_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章菜单、工具栏和类设计9.1菜单设计9.2类的设计9.3创建自定义工具栏结束放映?YES(是)NO(否)9.1

菜单设计菜单设计的概念菜单系统的规划菜单系统的创建菜单系统的运行与测试SETSYSMENU命令菜单设计综合举例9.2类的设计类的创建方法

使用“类设计器”创建类使用编程方式创建类把表单另存为类类的使用

扩展VFP的基类新类的注册与使用类设计的其它问题类设计综合举例9.3创建自定义工具栏定义工具栏类用编程方式定义工具栏类为表单集添加工具栏类

菜单设计的概念

菜单设计是VFP程序设计的一个重要组成部分,任何应用程序系统通常都少不了菜单,它是应用程序和用户沟通的桥梁。因此,菜单系统往往也是用户评价应用程序性能的重要方面。菜单系统设计一般可以分为规划、创建和运行测试三个主要步骤。菜

菜单系统的规划设计一般应遵守下述基本原则:按用户执行的任务而不按程序的层次结构来组织菜单系统。按预计菜单使用频率、逻辑顺序来组织菜单项及其中的子菜单。为每一个菜单项及其中的子菜单指定一个有意义的标题,设置必要的提示信息。合理为子菜单分组,并使用分隔线。尽可能为每个菜单项和子菜单设置访问键和快捷键。菜单项和子菜单都应限制在一个屏幕内,必要时可增加级联子菜单。菜

的创建

菜单可以通过编程来创建,但利用VFP提供的菜单设计工具,可以在窗口中直观地设计菜单,再利用系统生成菜单系统。创建菜单系统的具体内容与方法如下:

1.一般菜单的创建利用“菜单设计器”创建应用程序菜单系统这种方法可根据用户的具体要求,创建用户自定义的菜单系统。利用菜单中“快速菜单”创建应用程序菜单系统这种方法是将VFP主菜单系统加载到“菜单设计器”,通过增加、删除和修改达到快速创建菜单的目的。

2.快捷菜单的创建利用“快捷菜单设计器”创建快捷菜单利用“快速菜单”创建菜单系统方法步骤如下:(1)在“新建”对话框中选择文件类型为“菜单”,单击新建文件按钮。(2)在“新菜单”对话框中单击菜单按钮,弹出“菜单设计器”窗口,此时,主菜单栏上出现“菜单”菜单,其中包含用于创建和修改菜单系统的命令。(3)执行菜单→快速菜单,即出现加载了VFP的主菜单系统的“菜单设计器”窗口。(4)修改该主菜单系统的内容。(5)打开“另存为”对话框,输入菜单文件名(扩展名为.MNX,其备注文件扩展名为.MNT),单击保存按钮,关闭“菜单设计器”窗口。“新菜单”对话框加载了VFP主菜单系统的“菜单设计器”利用“菜单设计器”创建菜单系统创建菜单项和子菜单菜单项的设置菜单层的设置菜单系统选项设置

使用“菜单设计器”创建应用程序菜单系统有以下内容:

(1)在“新建”对话框中选择文件类型为“菜单”,单击新建文件按钮。

(2)在“新菜单”对话框中单击菜单按钮,弹出“菜单设计器”窗口,不执行快速菜单命令,则“菜单设计器”窗口中显示一个空白的“菜单1”,可由此开始创建应用程序菜单系统。现将创建菜单项和子菜单的基本方法归纳如下:①菜单名称指定菜单项及子菜单的标题,默认第一个字母为访问键键名字母(汉字无效)。也可在标题文字中的任何位置用“\<”后紧跟键名字母定义访问键,例如“文件(\<F)”。创建菜单项和子菜单(1)

菜单项分组

为增强菜单的可读性,可用“\-”作菜单的标题定义分隔线(此时其它选项用默认值)将菜单中内容相关的菜单项分隔成组。方法是在菜单名称中键入“\-”。③

结果

指定在选择菜单项时发生的动作。其中包含:命令执行一个命令。如,DOFORMMIAN(MAIN为表单名)。填充名称指定一个系统或已存在的菜单名。例如,_MSM_FILE(文件菜单项)。子菜单打开一个子菜单。设计过程中需继续创建并定制子菜单项。过程运行一个过程。创建菜单项和子菜单(2)

创建在结果为子菜单或过程时用于创建子菜单或过程,创建过程将打开一个编辑窗口,在窗口中输入过程代码。⑤

编辑更改已建立的相关的子菜单或过程。⑥

菜单级选择要处理的不同层次的菜单或子菜单。⑦

移动控件菜单名称列左边的双向箭头按钮,用鼠标点住它拖动可以调整菜单项或子菜单的位置。⑧“菜单设计器”窗口中的命令按钮的作用:插入添加新菜单项插入栏在子菜单中添加VFP系统菜单条删除删除已建菜单项或子菜单项预览查看菜单运行时的效果,但不执行菜单任务创建菜单项和子菜单(3)“菜单设计器”窗口中显示的空白“菜单1”创建菜单项和子菜单的“菜单设计器”窗口分隔线选项按钮

(1)选项设置每个菜单项和子菜单的后面都有一个选项按钮,用于确定菜单项和子菜单的相关选项。单击选项按钮,出现“提示选项”对话框,其中:键标签指定菜单项或子菜单的可选键盘快捷键的键组合(CTRL键或ALT键与其它键的组合),方法是按下要指定的键组合,但不能将CTRL+J指定为菜单项的快捷键。键说明显示需要出现在菜单项旁边的快捷键提示文字,除非将其更改,否则与“键标签”相同。

定制菜单项(1)

定制菜单项(2)跳过显示“表达式生成器”,在“表达式生成器”的“跳过”框中,输入表达式来确定菜单项是否可用。如表达式为“真”(.T.),则菜单项不可用。信息显示“表达式生成器”,在“表达式生成器”的“信息”框中,可以输入用于选择菜单时显示在VFP主窗口状态栏中的提示信息。主菜单名指定菜单项的名称,如果未指定则VFP自动生成。使用该名称可在运行时引用菜单项。此选项只在“菜单设计器”窗口的“结果”为“命令”、

定制菜单项(3)“子菜单”或“过程”时显示。注释输入开发者使用的注释信息。在任何情况下注释都不影响所生成的代码,运行菜单程序时VFP将忽略注释。

菜单选项设置执行菜单命令显示→菜单选项,打开“菜单选项”对话框。在该对话框中允许为特定的菜单(菜单栏或菜单项)指定过程代码,这里的过程需要用过程定义语句定义。其中包括如下设置内容:菜单层的设置(1)名称包含菜单项名。默认情况下,与“菜单设计器”和“菜单级”中的文本相同,可在菜单名称列中键入一个新名来更改它。过程创建菜单过程代码或显示已存在的代码。“编辑”按钮打开一个编辑窗口,代替在过程下的文本编辑区中创建代码。菜单层的设置(2)“提示选项”对话框“菜单选项”对话框菜单系统选项设置(1)

执行菜单命令显示→常规选项,打开“常规选项”对话框。在该对话框中,主要对整个菜单系统有关的项目进行设置。

(1)在“过程”下的文本编辑框中创建用于整个菜单系统的过程,这里的过程需要用过程定义语句。但在菜单项中调用它时,应在“结果”中选中“过程”,再用DO命令调用。

“编辑”按钮:打开编辑窗口,代替“过程”下的文本编辑框,在其中创建代码。

(2)在“位置”选项按钮组中,确定应用程序菜单系统与VFP主菜单系统或当前活动菜单系统的关系。具体是:替换使用新的菜单系统替换VFP主菜单系统。菜单系统选项设置(2)追加将新菜单系统添加在VFP主菜单系统的后面。在…之前将新菜单插入VFP主菜单系统中指定菜单项的前面。这个选项显示一个包含VFP主菜单系统菜单项名称的下拉列表,选择希望新菜单在其后面的菜单项名。在…之后与上一功能的作用正好相反。

(3)在“菜单代码”复选框组中选择“设置”或“清理”单击确定按钮激活编辑窗口,编写相应代码。设置向菜单系统添加初始化代码。菜单系统选项设置(3)清理向菜单系统添加清理代码,在清理代码的后面可以用过程定义语句定义过程,这里定义的过程在所有菜单命令中都可以使用,但在菜单命令调用的程序(过程或表单等)中使用时须加IN子句,格式为:DO<过程名>IN<菜单程序文件名>。

(4)确定菜单的使用对象顶层表单如果选定,允许该菜单在顶层表单(SDI)中使用。如果未选定,只允许在VFP主窗口中使用该菜单。创建SDI菜单后,可将其加到SDI表单中。方法是先设置表单的ShowWindow属性为“2-作为顶层表单”,然后为表单的Init事件添加以下代码:

DO菜单名WITHTHIS,.T.代码例如菜单名指定的菜单若为SDI菜单,则运行表单时,菜单加载在表单中,否则将加载在表单之外。

【例9.1.1】利用“快速菜单”功能建立一个新菜单,菜单文件名为MYAPP.MNX。要求如下:(1)保留系统主菜单中“文件”、“编辑”和“帮助”三个菜单项及其中的所有子菜单。(2)在“文件”菜单项前插入“系统维护”,将“显示”菜单项改为“应用程序”。(3)“系统维护”菜单项有一个菜单命令“文件管理”,任务是执行命令“DOFORMFILT”,“应用程序”菜单项共有三个菜单命令“人员管理”、“工资管理”,分别执行命令“DOFORMJBQK”和“DOFORMGZQK”,其后插入VFP的“运行”菜单条。(4)在“文件”菜单项中的“退出”子菜单前插入一个子菜单项“返回系统”,任务是执行一个过程,有两条语句“CLOSEALL”和“SETSYSMENUTODEFAULT”菜单设计综合举例(1)菜单设计综合举例(2)

【例9.1.2】创建一个人事管理系统菜单,保存在MAIN.MNX文件中,要求如下:

①替代VFP主菜单系统。②为整个菜单系统创建一个缺省过程DULT,用于显示一个消息框。③输入菜单的初始化代码:SETTALKOFF、MYPSD=.F._SCREEN.Caption=“人事管理系统”;输入菜单的清理代码:CLOSEDATA、READEVENTS。④各菜单项及其子菜单和标题、访问键、结果及其内容见表—人事管理系统菜单。⑤“系统维护”菜单项中除“用户口令”和“退出系统”以外的所有子菜单,以及其它菜单项的跳过条件均为MYPSD=.F.。⑥为“系统维护”菜单项中的“退出系统”定义快捷键:CTRL+X

表:

人事管理系统菜单

菜单项标题

子菜单标题

访问键

结果及其内容

主菜单名

S

子菜单

MY_XTWH

用户口令

P

命令:DOFORMPSWDTOMYPSD

分隔线

文件管理

F

命令:DOFORMFILT

初始化数据

I

命令:DOMYZAP

分隔线

系统维护

退出系统

E

过程:CLEAREVENTS、QUIT

N

子菜单

MY_SJCL

基本情况

C

命令:DOFORMJBQK

工资情况

G

命令:DOFORMGZQK

岗位情况

W

命令:DOFORMGWQK

数据处理

部门情况

B

命令:DOFORMBMQK

统计

T

命令:DODULT

MY_TJ

查询

X

命令:DODULT

MY_CX

打印

P

命令:DODULT

MY_DY

帮助

H

命令:DODULT

MY_BZ

“常规选项”对话框VFP主菜单系统菜单项名称的下拉列表利用“快捷菜单设计器”创建快捷菜单

在“新菜单”对话框中,单击快捷菜单按钮,弹出“快捷菜单设计器”窗口。窗口界面与“菜单设计器”相同,创建并定制快捷菜单的方法与创建菜单系统的方法类似(运行快捷菜单的命令代码必须放到控件的RightClick事件中)。

【例题】创建一个快捷菜单,菜单文件名为SETFORM.mnx,具体要求是:七个菜单项“首记录”、“上一记录”、“下一记录”、“末记录”、“设置背景”、“刷新”和“关闭”。“末记录”和“设置背景”之间加一条分隔线。“快捷菜单设计器”窗口“系统维护”的子菜单项“文件管理”“应用程序”的子菜单“文件”的子菜单项“返回系统”的过程代码例题9.1.1菜单的运行例题9.1.2菜单的运行菜单系统的运行和测试(1)

1.生成菜单程序菜单文件不能像表单文件那样直接运行,需要生成扩展名为.MPR的菜单程序文件。方法是在“菜单设计器”或“快捷菜单设计器”窗口中打开菜单,执行菜单命令菜单→生成,将弹出“生成菜单”对话框,“输出文件”的默认文件名与菜单文件名相同,但扩展名为.MPR,单击按钮将弹出“另存为”对话框用于修改菜单程序文件名,单击产生按钮,将自动生成菜单程序文件。

2.运行菜单

运行菜单与执行程序基本一样,可以在交互方式下执行菜单命令程序→运行,在“运行”对话框中输入菜单程序文件名,单击运行按钮即可。菜单系统的运行和测试(2)也可以在命令窗口或程序中用DO命令执行,但必须带扩展名,例如:DOMAIN.MPR如果在交互方式下运行菜单后想恢复VFP主菜单系统,可在命令窗口执行“SETSYSMENUTODEFAULT”命令。如果将菜单程序文件作为应用程序程序的主程序,通常在菜单的清理代码中包含“READEVENTS”语句,且在退出应用程序系统的相应菜单命令中包含“CLEAREVENTS”语句。快捷菜单通常在表单集、表单或对象的RightClick事件代码中调用,这样当用户右击时即弹出快捷菜单。

3.测试菜单系统

测试菜单系统的方法非常简单,只要运行菜单并对照规划设计要求,测试菜单和子菜单的各项功能。发现错误须在“菜单设计器”或“快捷菜单设计器”窗口中修改,并重新生成菜单程序文件。如此反复进行,直至符合要求为止。菜单系统的运行和测试(3)“生成菜单”对话框“另存为”对话框“运行”对话框

功能:在程序运行期间,启用或废止VisualFoxPro系统菜单栏,并对其重新配置。

语法:SETSYSMENUON|OFF|AUTOMATIC|TO[MenuList]|TO[MenuTitleList]|TO[DEFAULT]|SAVE|NOSAVE

参数:

ON

在程序执行期间,当VisualFoxPro等待诸如BROWSE、READ和MODIFYCOMMAND等命令的键盘输入时,启用VisualFoxPro主菜单栏。

OFF

在程序执行期间废止VisualFoxPro

主菜单栏。SETSYSMENU

命令的使用(1)

AUTOMATIC

使VisualFoxPro主菜单栏在程序执行期间可见。可以访问菜单栏,但菜单项是启用还是废止则取决于不同的命令。在VisualFoxPro中,默认设置是AUTOMATIC。

TO[MenuList]

TO[MenuTitleList]

指定VisualFoxPro

主菜单栏中菜单或菜单标题的子集。这些菜单或菜单标题可以是主菜单中的菜单或菜单标题的任意组合,相互之间用逗号隔开。菜单和菜单标题的内部名称列在系统菜单名称中。SETSYSMENU

命令的使用(2)

例如,下面的命令从VisualFoxPro主菜单栏中移去除“文件”和“窗口”菜单外的所有菜单:

SETSYSMENUTO_MFILE,_MWINDOW

使用RELEASEBAR可指定菜单中的可用菜单项。

TO[DEFAULT]

将主菜单栏恢复为默认设置。如果对主菜单栏或它的菜单做过修改,可发出SETSYSMENUTODEFAULT命令恢复。使用SETSYSMENUSAVE可以指定默认设置。

SAVE

使当前菜单系统成为默认设置。如果在发出SETSYSMENUSAVE命令之后修改了菜单系统,可以通过发出SETSYSMENUTODEFAULT命令来恢复前面的设置。SETSYSMENU

命令的使用(3)

NOSAVE

重置菜单系统为默认的VisualFoxPro系统菜单。但是,只有当发出SETSYSMENUTODEFAULT命令之后才显示默认的VisualFoxPro系统菜单。

说明:

SETSYSMENU控制程序运行期间的VisualFoxPro主菜单栏。它允许有选择地移去VisualFoxPro主菜单系统中的菜单标题和菜单,并可以将其恢复。

不带其他参数的SETSYSMENUTO命令废止VisualFoxPro主菜单栏。SETSYSMENU

命令的使用(4)类的基本概念

类的概念是由类型和模块相结合而产生的。一般地说,具有共同特征、状态和行为的对象的集合称为类。类和对象是紧密相连的,类是对象的模板,而单个对象是对应类的一个实例。如电话机是一个类,而某一部电话机是电话机类的一个实例。命令按钮是一个类,而某一个表单上的“确定”按钮是命令按钮的一个实例。

基类(baseclass)是VisualFoxPro系统提供的内部定义的类,可用作其他用户自定义类的基础。如,表单和所有控件就是基类,可在此基础上创建新类,增添自己需要的功能。

子类(subclass)是以其他类定义为起点,为某一种对象所建立的新类。子类将继承任何对父类(即子类所基于的类)所做的修改。

用户自定义类(user-definedclass)与VisualFoxPro基类相似,但由用户定义,并且可用来派生子类。这种类没有可视表示形式。继承性和多态性

继承性(inheritance):说明了子类延用父类特征的能力。如果父类特征发生改变,则子类将继承这些新特征。例如将某标签的BackStyle属性设置为0-透明,那么以此控件为基础派生的子类BackStyle属性也为0-透明。继承性体现并扩充了面向对象程序设计方法的共享机制。

多态性(polymorphism):主要是指一些关联的类包含同名的方法程序,但方法程序的内容可以不同。具体调用哪种方法程序在运行时根据对象的类确定。在面向对象的程序设计中,多态性使得相同的操作可以作用于多种类型的对象上并获得不同的结果,从而增强了系统的灵活性、维护性、扩充性等。封装性和抽象性

封装性(encapsulation):说明包含和隐藏对象信息,如内部数据结构和代码的能力。封装将操作对象的内部复杂性与应用程序的其他部分隔离开来。例如,当对一个命令按钮设置Caption(标题)属性时,不必了解标题字符串是如何存储的。封装和隐藏是面向对象技术的核心,使得软件具有很好的模块性,各模块具有明显的范围和边界,实现了模块内的高内聚和模块间的低耦合。

抽象性(abstraction):是指提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。当创建一个类时,例如一系列表的定位按钮,可以将它作为整体,而不必关心其中的单个组件以及它们相互之间是如何作用的。VFP

的基类

VFP提供了29种基类,按类所创建的对象是否允许包含其它对象区分,有容器类和控件类两种;按类所创建的对象在运行时是否能显示来区分,有可视类和不可视类两种。详见VFP基类表。各种容器类中,表单集允许包含表单、工具栏;表单允许包含页框、任意控件、容器;页框允许包含页面;页面允许包含任何容器和控件;容器和控件允许包含任何控件;工具栏允许包含任何控件、容器、自定义对象;命令按钮组允许包含命令按钮;选项按钮组允许包含选项按钮;表格允许包含表格列;表格列允许包含标题以及除表单集、表单、工具栏、计时器、标题列以外的任意对象。VFP

基类表控件类容器类复选框CheckBox列表框ListBox*表单集FormSet表单Form组合框ComboBox编辑框EditBox控件Control容器Container微调控件Spinner文本框TextBox表格Gord表格列Column*计时器Timer标签Lable*页框PageFrame页面Page形状Space线条Line工具栏ToolBar*自定义Custom图像Image标头Header命令按钮组CommandGroup选项按钮组OptionGroup命令按钮CommandButton选项按钮OptionButtonOLE容器控件OLEContainerControl注:表中标有*号的为不可视类,其余为可视类。OLE绑定型控件OLEboundcontrol分隔符Separator使用“类设计器”创建新类

打开“类设计器”的方法有以下三种:在“项目管理器”中选择“类”选项卡,点击新建按钮。打开“新建”对话框,选择“类”,点击新建文件按钮。在命令窗口输入CREATECLASS命令。使用上述方法将首先打开“新类”对话框,从中指定新类的名称、新类所基于的类以及保存新类的类库文件,点击确定按钮后,“类设计器”被打开。

“类设计器”的用户界面与“表单设计器”相同,在“属性”窗口中可以编辑和查看类的属性,可以使用“表单控件”工具栏向新类(指容器类)添加控件。“新类”对话框“类设计器”的用户界面类设计的其它问题类的修改、复制与删除为类添加对象为类添加新属性为类添加新方法程序为类指定外观覆盖默认属性设置调用父类方法程序代码防止基类代码被执行使用编程方式创建新类

用户既可以在“类设计器”或“表单设计器”中可视地定义类,也可以在

.PRG文件中以编程方式定义类。

用命令创建类的格式如下:

DEFINECLASS<新类名>As<基类名>[[PRITECTED<属性名1>,<属性名2>…]<属性名>=<表达式>…][ADDOBJECT[PROTECTED]<对象名>As<类名2>[NOINIT][WITH

<属性名表>]][PROTECTED]FUNCTION/PROCEDURE

<过程名>…[ENDFUNC/ENDPROC]]ENDEDFINE注:类定义代码必须放在其他程序代码之后,而不能放在它们之前,放在类定义之后的命令代码不被执行。

新类的注册执行菜单命令工具→选项。在“选项”对话框的“控件”选项卡中选择“可视类库”选项并单击添加按钮。在“打开”对话框中输入要注册的新类所在的类库名(例如,MYCLASS),单击打开按钮。如要每次运行VFP时自动成为表单工具栏中的可用类库,单击设置为默认值按钮。单击确定按钮完成新类的注册。

要使用从VFP的基类派生的新类,则必须在该新类创建完成后进行类的注册,以便在表单向导与表单设计器的表单控件工具栏中直接显示,并可以像使用VFP的基类一样创建对象。注册方法如下:“选项”对话框中的“控件”选项卡添加类库的“打开”对话框新类的使用

使用新建的类,可在“表单控件”工具栏中单击查看类按钮,打开一小菜单,从中选择新建类所在的类库(MYCLASS),则“表单控件”工具栏中即显示MYCLASS类库中类的图标。此时,即可将新建的类添加到表单、表单集、工具栏等容器类控件中。如要恢复VFP的基类,可再单击查看类按钮,从打开的小菜单中选择“常用”即可。表单控件工具栏中添加新类图示MYCLASS类库中新类的图标类的修改

VFP系统允许用户对已存在的类进行修改。方法有:在“项目管理器”中:

选择“文件”菜单中的“打开”菜单项:在命令窗口中使用命令:

MODIFYCLASS?[OF<类库文件名>]

进入打开类库文件对话框,后续操作同上述第2种方法。

进入“类设计器”后,与创建新类类似,可以对类进行修改操作。对类的修改将影响所有的子类和基于这个类所创建的所有对象。如果类已经被应用程序组件使用,就不能修改类的Name属性,否则,在执行应用程序时将找不到已被换名的类。类的复制

复制类库中的类若想将类从一个类库复制到另一个类库中,首先,必须要求两个类库都在项目中,两个类库可存放在不同的项目中。如果类库倘未添加到项目中,可以先选择“项目管理器”中的“类”选项卡,单击“添加”按钮,在“打开”对话框中指定被选择的类库文件名。选择包含类的类库左边的“+”号。选定要复制的类,用鼠标将类从源类库拖到目标类库中。详见将项目文件Sht中存放在类库文件(MyTool.VCX)中的类(mytoola1)复制到项目文件JXGL中类库文件(form.VCX

)中的示意图。通常,将类和基于这个类的所有子类都存放在一个类库文件中。否则,如果一个类包含多个不同类库中的元件,那么在运行时或设计时,加载这个类将花费较长的时间,因为,包含类元件的类库必须全部打开。因此,适当的复制类是必要的。类复制的示意图鼠标拖动类的删除

根据实际需要,对于不再使用的类和类库,可用“移去”操作将类库或类库中的类删除掉。删除类和类库操作较为简单。在“项目管理器”中选择要删去的类或类库,单击“移去”按钮,便可将类或类库移去或删除。删除类操作,也可以在命令窗口中,使用如下命令:

REMOVECLASS〈类名〉OF〈类库文件名〉<类名>表示从可视类库中需要删除的类定义的名字,它可能是其他类的父类。用<类库文件名>指定包含需要删除的可视类库名。删除类操作要慎重,因为被删除的类可能是用于派生其他类的父类,当它被删除时,其他派生类也将失去定义。

为类添加对象

创建的新类,如果是控件类或容器类,则可以向它添加对象(控件或容器)。实现时,首先须打开“类设计器”,从“表单控件”工具栏中选择所要添加的对象的按钮,将它拖到“类设计器”中,调整对象的大小,使其满足要求。可以通过主菜单中“类”菜单项中的“新属性”和“新方法程序”为新类设置属性和编写方法程序的代码。也可以单击右键,从弹出的快捷菜单中选择“属性”和属性窗口中的“方法程序”为新类设置属性和添加方法程序。为类添加新属性

虽然新建的类继承了父类的属性,但用户还可以为其添加新的属性。添加新属性的方法是:⑴打开“类设计器”,执行菜单命令类→新建属性。⑵在弹出的“新建属性”对话框中,作如下操作:在“名称”栏内,输入属性的名称。在“可视性”栏内,指出可视性:公共、保护或隐蔽。在“说明”栏内,填入有关属性的说明。因为,在用户设置新属性时,有可能输入一些无效的设置,而造成运行时出错,在“说明”中增加属性的有效设置的说明,以便其他用户和用户本身在引用该属性的代码中,检验属性值的有效性。单击“添加”按钮后,新的属性就被添加到类中。“新建属性”对话框“可视性”的含义

“新属性”和“新方法程序”对话框中的“可视性”框中有三个选项:公共、保护和隐蔽。其中,“公共”是默认值,其含义是:可在对象设计时进行修改。若属性和方法程序设置为“保护”,则仅能被该类定义内的方法程序或该类的派生类(子类)所访问,在由其产生的对象的属性中,该属性的值用斜体字显示。若属性和方法程序设置为“隐蔽”,则只能被该类的定义内成员所访问,该类的子类不能引用它们。为确保类设计时所拥有的正确功能,防止用户使用编程时随意改变属性或从类外调用方法程序,可以将类的属性和方法程序设置为隐藏。

为类添加新方法程序与向类添加新的属性一样,也可以向类添加新的方法程序。方法程序所保存的是调用时可以运行的过程代码。添加新方法程序和添加新属性的操作相似:

⑴打开“类设计器”,执行菜单命令类→新方法程序

⑵在弹出的“新方法程序”对话框中,作如下操作:在“名称”栏内,输入方法程序的名称;在“可视性”栏内,指出可视性:公共、保护或隐藏;在“说明”栏内,可以加入有关方法程序的说明;按下“添加”按钮,新的方法程序被添加到类中。

类的属性和方法不能赋予同一个名字。即已被使用过的属性名或方法名不能再作为新的属性名或方法程序名。“新方法程序”对话框为类指定外观为类指定外观,是指用户使用类设计应用程序时,用来表示类的图标。图标分为二种:工具栏图标和容器图标。1.设置工具栏图标的方法打开“类设计器”,执行菜单命令类→类信息,在“类信息”对话框的“工具栏图标”框中输入.BMP文件的名称和路径。把类和工具栏一起放入类库后,工具栏图标将显示在“表单控件”工具栏中。工具栏图标的.BMP文件必须是15*16像素点大小。若图片过大或过小,图形可能会发生变形。2.设置容器图标的方法通过设置容器图标可指定“类浏览器”中类的显示图标。打开“类设计器”,执行菜单命令类→类信息,在“类信息”对话框的“容器图标”框中键入将在“表单控件”工具栏按钮上显示的.BMP文件名称和路径。只有在VFP的专业版中才可以在“类浏览器”中显示容器图标。“类信息”对话框的“工具栏图标”框工具栏图标原有图标“表单控件”工具栏中显示工具栏图标“类信息”对话框的“容器图标”框“类浏览器”窗口原有图标容器图标复盖默认属性设置基于用户自定义类的对象被添加到表单后,可以修改创建对象中所有未被保护的属性,来复盖其默认的属性设置。表单运行时,表单中对象执行用户修改后的属性设置。即以用户定义的新属性复盖类的默认属性值。即使在“类设计器”中该属性的值被修改,表单中的对象的属性值也不会改变。如果,用户在设计表单时,对象的属性设置没有被修改,则在“类设计器”中的属性被修改时,由类所创建的对象的相关属性将会改变。例如,在将一个基于类的对象添加到表单中,并且,将该对象BackColor属性从白色改变为黄色。若再用“类设计器”将类的BackColor属性改变为兰色,用户表单上的对象的BackColor属性仍然是黄色。如果用户在设计表单时,没有对创建对象的BackColor属性作修改,而将类的BackColor属性改为兰色,则表单上的创建对象将继承这一修改,也改变为兰色。

调用父类方法程序代码(1)子类和对象自动继承基类的功能。但同时用户也可以用新的功能来替代继承来的功能。例如,用户把基于某个基类的对象或由某个基类派生出的子类加到一个容器(如表单)中时,重新为这个对象或子类的Click事件编写程序代码,在运行时,基类的代码不执行,而执行新的程序代码。在较多的情况下,用户希望在为新类或对象添加新功能的同时,仍然保留父类的功能,这时,用户可以在类或容器层次的各级程序代码中使用函数DODEFAU()或作用域操作符(::)调用父类的程序代码。调用父类方法程序代码(2)例如,有表单类MYFORMA中设置Click事件代码为:

THISFORM.BackColor=RGB(0,0,255)&&蓝色在基于FORMA类创建的表单对象中,添加一个三个命令按钮。第一个命令按钮的Click事件代码为:

THISFORM.BackColor=RGB(255,255,0)&&黄色第二个命令按钮的Click事件代码为:

THISFORM.BackColor=RGB(255,0,255)&&粉红色第三个命令按钮的Click事件代码为:

MYFORMA::Click

当运行该表单时,单击第一个命令按钮时,表单背景为黄色;单击第二个命令按钮时,表单背景为粉红色;而单击第三个命令按钮时,调用了父类(MYFORMA)的方法程序代码,表单背景为蓝色。例如防止基类代码被执行(1)

VFP的对象继承父类或基类的所有属性、事件和方法程序。但有时在事件和方法程序中希望防止发生基类的默认操作。例如,用户使用文本框接收口令时,希望键盘输入的内容在文本框内不显示,可以通过在方法程序代码中加入NODEFAULT关键字来实现。

例如,设计一个表单,添加一个“文本框”对象来接收口令字。要求在输入口令字时,文本框中不显示输入内容,而且每输入一个A~Z以内的字符,就显示一个“*”,A~Z之外的字符不接收,并把输入的内容存放到内容变量_MM中。要实现以上功能,可按以下步骤操作:⑴创建一个表单对象,并在表单上添加一个文本框对象;防止基类代码被执行(2)

⑵为表单的init事件编写代码:

PUBLIC_MM&&定义全局变量_MM_MM=’’&&为_MM赋初值空字符串⑶为文本框的KeyPress事件添加代码:

PARAMETERSnKeyCode,nShiftAltCtrl

NODEFAULTIFBETWEEN(nKeyCode,65,90)&&输入内容只能在“A”~“Z”之间

This·Value=ALLTRIM(This·Value)+“*”&&用“*”替代输入内容显示_MM=_MM+CHR(nKeycode)

endif

⑷为文本框的Destroy事件设置程序代码:

CLEAREVENTS定义工具栏类

创建用户自定义工具栏,首先要在VFP提供的工具栏基类基础之上创建一个工具栏子类,而后向该工具栏子类添加对象,并为其定义属性、事件和方法程序。最后,在使用时还须将自定义工具栏添加到表单集中。自定义工具栏类的操作与上节所述的类设计的操作基本相同,只是在“新类”对话框中的“派生于”栏中需选择“Toolbar”基类。

工具栏上的对象是用紧排方式排列在一起,当向工具栏上添加了多个对象后,可以在对象之间添加Separater对象,使它们之间分隔一点距离。注意:不能添加表格控件到工具栏。现通过例题9.3.1说明自定义工具栏的操作。用编程方式定义工具栏类用户除了可以在“类设计器”中可视地定义自定义工具栏类以外,还可以使用编程方式动态地建立自定义工具栏。编程方式定义工具栏类可在VFP系统的命令窗口中进行的。即在命令窗口中用MODIFYCOMMAND命令建立应用程序;在应用程序中用DEFINE命令定义工具栏类;用ADDOBJECT命令添加对象;用PROCEDURE<事件名>命令为<事件名>定义方法程序。

用编程的方式创建一个自定义工具栏的方法见例题9.3.2。

为表单集添加工具栏类

VFP系统允许在表单集中添加工具栏,使得在打开表单集中的各个表单时,工具栏也一起被打开。VFP不能直接在某个表单中添加工具栏。如果想把工具栏添加到某个表单中,则必须将此表单成为表单集的成员。然后再把工具栏添加入表单集。将工具栏添加到表单集的操作方法有:1.使用“表单设计器”,在表单集中添加工具栏2.使用“项目管理器”,在表单集中添加工具栏3.使用事件代码在表单集中添加工具栏类【例9.3.1】创建一个自定义工具栏类,类名为tbrFont,保存在类库文件MYTOOL.VCX中。工具栏中包含2个标签、1个组合框、1个微调框和3个命令按钮。该工具栏可完成以下功能:设置活动表单中活动控件的文本内容的字体格式:字体、字号、粗体、斜体和是否加下划线。根据上述功能为相关控件编写事件代码。工具栏的标题(Caption属性)为“字体格式工具栏”,其它对象的主要属性设置见表9.3.1。【例9.3.2】用编程方式定义一个工具栏,其中包含两个按钮,当单击按钮时将改变按钮标题的字体属性。当自定义工具栏对象创建时,各个按钮自动地以设计时加入工具栏的顺序显示,而忽略原定的Top和Left属性。当自定义工具栏的大小改变时,VFP系统将自动调整每个按钮的显示方式。详见应用程序清单和程序运行结果。自定义工具栏的例题分析例题9.3.1的自定义工具栏图示控件名属性名属性值cbofontname(组合框)rowsourcearrfontrowsourcetype5-数组valuearrfontspnfontsize(微调框)keyboardhighvalue72keyboardlowvalue5spinnerhighvalue72.00spinnerlowvalue5.00value9控件名属性名属性值控件名属性名属性值cmdfontIcaptionIlabel1caption字体fontbold.T.label2caption字号fontItalic.T.cmdfontBcaptionBcmdfontUcaptionUfontbold.T.fontbold.T.表9.3.1fontunderline.T.组合框cbofontname的InteravtiveChage事件代码:_screen.activeform.activecontrol.fontname=this.value微调框spnfontsize的InteravtiveChage事件代码:_screen.activeform.activecontrol.fontsize=this.value命令按钮cmdfontB的Click事件代码:this.fontbold=!this.fontbold_screen.activefo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论