组件
组件,是对数据和方法的简单封装。C++ Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。VCL和CLX组件是C++ Builder系统的核心。
组件 | |
---|---|
目录
基本释义
组件
zǔjiàn
1.[assembly]∶供装配整台机器、构件或元件的零件组合 [1]
2.[module;package]∶在电子或机械设备中组装在一起形成一个功能单元的一组元件
3.[unit]∶组装产品(如书橱或碗橱)时所组合的通常或多或少重复的部分
4.[section]∶可被组装或被重新组装的几个部件之一
基本概念
简而言之,组件就是对象。C++ Builder中叫组件,Delphi中叫部件,而在Visual BASIC中叫控件。
组件是对数据和方法的简单封装。C++ Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。
对象管理小组(Object Management Group,OMG)的"建模语言规范"中将组件定义为:"系统中一种物理的、可代替的部件、它封装了实现并提供了一系列可用的接口。一个组件代表一个系统中实现的物理部分,包括软件代码(源代码,二进制代码,可执行代码)或者一些类似内容,如脚本或者命令文件。"[2]
组件分类
组件并不是很复杂,.NET为我们提供了丰富的底层支持。如果有MFC或者API图形界面的开发心得,那么学会.net组件可能只需要很短的时间就够了。 自己开发的组件通常有三种类型:复合组件(Composite Controls),扩展组件(Extended Controls),自定义组件(Custom Controls)。
复合组件:将现有的各种组件组合起来,形成一个新的组件,将集中组件的性能集中起来。
扩展组件:在现有组件的组件的入门上派生出一个新的组件,为原有组件增加新的性能或者更改原有组件的控能。
自定义组件:直接从System.作windows.Forms.Control类派生出来。Control类提供组件所需要的所有入门性能,包括键盘和鼠标的事件处理。自定义组件是最灵活最强大的办法,但是对开发者的要求也比较高,你必须为Control类的OnPaint事件写源代码,你也可以重写Control类的WndProc办法,处理更底层的作windows消息,所以你应该学习GDI+和作windows API。
第三方控件
组件开发者应该掌握的三项主要内容是:属性、事件和方法。
由于组件开发复杂度较高, 专业第三方控件 会重写或者拓展了一些方法和属性,从而能实现某些新的功能,同时他们有较大的可定制性,可以根据使用者的需要设置不同的特性,从而完全适应特定项目的需求。常见的第三方控件包括表格控件、报表控件、用户界面控件等。
用户界面组件
用于开发构建用户界面(UI)的组件,帮助完成软件开发中视窗、文本框、按钮、下拉式菜单等界面元素的开发。
图表组件
用于开发图表的组件,帮助软件实现数据可视化,实现开发时较难独立完成的复杂图表。
代表:ComponentOne Studio Chart for WinForm。
报表组件
用于开发报表的组件,在软件中实现报表的浏览查看、设计、编辑、打印等功能。
代表ActiveReports等。
表格组件
专门用于开发表格(CELL)的组件,主要实现网格中数据处理和操作的功能。
代表:FlexGrid、Spread等。
组件定义
卡耐基梅隆大学:
一个不透明的功能实体,能够被第三方组装,且符合一个构件模型。
计算机百科全书:
是软件系统中具有相对独立功能、接口由契约指定、和语境有明显依赖关系、可独立部署、可组装的软件实体。
软件构件著作:
是一个组装单元,它具有约定式规范的接口,以及明确的依赖环境。构建可以被独立的部署,由第三方组装。
产生背景
组件是近代工业发展的产物,兴起于20世纪初,目的是功能模块化,前提是接口标准化,好处是构成产品的各个功能组件,由更专业的厂商生产,提高了质量,降低了成本。而生产组件的厂商,同样的组件,可应用于多类产品和多个领域,极大地扩展了市场范围。
软件工程中的组件
具体应用
使用现成的组件来开发应用程序时,组件工作在两种模式下:设计时态和运行时态。在设计时态下,组件显示在C++ Builder窗体编辑器下的一个窗体中。设计时态下组件的方法不能被调用,组件不能与最终用户直接进行交互操作,也不需要实现组件的全部功能。在运行状态下,组件工作在一个确实已经运行的应用程序中。组件必须正确地将自身表示出来,它需要对方法的调用进行处理并实现与其他组件之间有效的协同工作。设计时态下所有的组件在窗体中都是可见的,但在运行时态下不一定可见。如TTable、TQuery和TDataSet在运行时态下就不可见,但他们均完成了重要的功能。
Flash 组件应用与开发
Flash 组件概述
组件是带有参数的影片剪辑(Movieclip),这些参数可以用来修改组件的外观和行为。每个组件都有预定义的参数,并且它们可以被设置。每个组件还有一组属于自己的方法、属性和事件,它们被称为应用程序程接口(ApplicationProgrammingInterface,API)。使用组件,可以使程序设计与软件界面设计分离,提高代码的可复用性。Flash MX 2004 或 Flash MX Professional 2004 中包含的组件不是 FLA文件,而是 SWC文件。SWC 是用于组件的 Macromedia文件格式。库项目中的电影剪辑可以被预编译成swf文件。这样可以缩短影片测试和发布的执行时间。将 SWC文件拷贝到 First RunComponents目录后,该组件便会出现在"组件"面板中。
组件基类
Flash 自带的组件都位于mx.controls包中。组件直接或间接继承于UIComponent类,UIComponent类对UIObject类做了扩展,而UIObject类又是MovieClip类的子类。MovieClip类不属于任何包,定义文件位于FlashInstalDirenFirst RunClasses目录。UIComponent类和UIObject类都位于mx.core包中,定义文件位于FlashInstalDirenFirst RunClassesmxcore目录。 UIObject类对MovieClip类进行封装,所有Flash V2组件都可以共享它的方法、属性和事件。UIObject类使组件在样式、事件和缩放比例调整上得到了实现。
它提供了动态创建删除组件的方法: ·createObject方法:直接调用attachMovie函数,返回一个MovieClip类型的引用。 ·createClassObject方法:调用createObject方法,创建一个指定类的组件实例,并返回所创建的组件的引用。 ·createEmptyObject方法:创建一个空的UIObject实例。 ·destroyObject方法:使用delete语句删除已经创建的组件实例。 UIObject还封装了其它的一些方法,包括: ·redraw方法:在当前帧重新绘制组件。 ·invalidate方法:标记组件,使之在下一个帧间隔重新绘制。 ·move方法:把组件移动到指定位置。
·setSize方法:设置组件大小。 ·setSkin方法:设置组件皮肤。 ·getStyle方法:获取样式信息。 UIObject类的属性除了scaleX和scaleY外,其它都是只读属性,使用时需要注意。所以如果要在运行时调整组件外观,就必须使用UIObject类的方法。对于只读属性的赋值是无效的,即使是对非只读属性的赋值,有时也会造成组件在外观显示上的差错。
UIObject类还定义了一系列的事件,包括加载事件(load)、卸载事件(unload)、移动事件(move)、重绘事件(draw)和大小调整事件(resize)。 利用UIObject类的组件创建方法,可以在运行时创建组件实例。 UIComponent类从UIObject类继承,它并不是一个可视的组件。和UIObject类一样,所有Flash V2组件都可以共享它的方法和属性。
它实现了组件的焦点获取、键盘输入,组件的禁用和启用以及组件的按布局调整自动大小。 UIComponent类的主要方法有: ·getFocus方法:利用焦点管理器(Selection)返回一个当前获取焦点的对象的引用。 ·setFocus方法:使组件获取焦点。 UIComponent类的enabled属性指定组件实例是否可用;tabIndex属性指定组件的焦点获取顺序。UIComponent类还定义一系列焦点和键盘事件:焦点获取事件(focusIn),焦点转移事件(focusOut)、键盘按下事件(keyDown)和键盘释放事件(keyUp)。
Flash V2 组件的基本使用方法
在Flash MX 2004和 Flash MX Professional 2004自带了一套组件称为Flash V2组件,它是从Flash MX的V1组件升级而来的,V1组件和V2组件尽量不要一起使用以免发生一些错误。V2组件支持实时预览,使开发者在编辑状态下就能看到组件的外观效果。开发者可以自行设置是否需要实时预览和实时预览的模式,以节省计算机资源。
在ControlàEnable Live Preview菜单设置是否使用实时预览,在ViewàPriview Mode菜单选择预览模式。组件实质上是一些被编译好的电影剪辑,其格式为SWC。SWC文件类似与Zip文件,可以使用一般的解压缩程序进行解压查看其内容。电影剪辑可以在编辑环境中直接发布为组件,也可以直接编译存储为swc格式的组件文件,便于其他开发者使用。同样,开发者也可以从外部导入组件。
使用组件,必须把组件面板中所需要的组件拖到舞台(Stage),使组件出现在库面板。这样组件就可以象普通的库项目一样被使用。使用脚本可以动态的创建组件实例,运行时创建组件可以有三个方法:createObject()、creatClassObject()和attachMovie()。attachMovie()是MovieClip类的方法,createObject()和creatClassObject()是UIObject类方法,但事实上它们都是对attachMovie()的直接或间接调用。
组件被添加后可以在属性或参数面板中直接设置组件的参数。另外还要为组件定义事件,最简单的方法是使用on(eventName)进行定义。另外还可以使用侦听器和事件处理函数等定义组件事件的处理方法。组件的事件定义比较灵活,使用何种方式定义取决与个人的习惯与偏好。当事件发生时,组件会广播一个Object类型的事件参数,该参数中包括了事件发生对象和事件类型的信息。另外,使用深度管理器(DepthManager)可以对组件进行深度管理。
自定义组件
Flash组件最大的特点是开发者可以自定义组件,尤其是界面元素的自定义,使其更具有吸引力。V2组件有它自己的一套默认界面方案,称为主题(Theme)。主题包括两个方面:样式(Style)和外观(Skin)。UIObject类的setStyle()和getStyle()方法可以获取和设置组件的样式。样式的设置比较简单,主要有以下三种方式:
·直接设置属性:
T.color=0xff5567;
·使用简单的setStyle()名值对方法自定义样式:
instanceName.setStyle("property", value);
·把样式对象与setStyle()方法结合使用来自定义样式:
//创建一个样式对象
var styleObj = new mx.styles.CSSStyleDeclaration;
//刻画样式细节
//……
styleObj.fontSize = 18;
//把样式应用到组件实例
b.setStyle("styleName", styleObj);
样式的级别包括4个层次:全局样式,应用于所有组件;组件类单独的默认样式,应用于某一类的组件;自定义样式;直接设置组件实例的属性。对于不同级别的样式Flash按照一定的顺序分别把这些样式应用到组件。
首先,Flash 查找组件实例上的样式属性,如果实例上没有直接设置样式,Flash 将查看实例的styleName 属性,确定是否向它分配了样式声明。如果 styleName 属性没有被分配样式声明,Flash 将查找默认类样式声明上的属性。如果没有类样式声明,并且属性没有继承它的值,则将检查 _global 样式声明。如果属性未在 _global 样式声明中定义,则该属性为 undefined。
另外,如果没有类样式声明,但属性确实继承了它的值,Flash 将查找该实例父级上的属性。如果属性未在父实例上定义,Flash 将检查父实例的 styleName 属性;如果未定义该属性,Flash 将继续查看父实例,直到 _global 级别。如果属性未在 _global 样式声明中定义,则该属性为undefined。
另一方面,为了更好的使用组件,还需要修改或重新定义组件外观。Flash V2的外观定义文件位于FlashInstralDirenFirst RunComponentFLA文件夹下。在修改外观时,需要把原始的外观定义文件作为外部库导入(FileàOpen External Library),并把外部库中的外观定义库项目拖到当前文档的库中,外观库项目通常都是电影剪辑(MovieClip)。每一个组件外观定义库项目文件夹中都包含一个States文件夹,其中定义了组件在不同状态下的外观,每一个状态都指定了一个链接名(linkageName)作为脚本引用,如果修改了这个名称,则会使组件在该状态下的外观加载发生错误。在组件的类文件中,每一个状态都使用一个字符串属性指定其外观库项目的链接名,如果要重新定义组件某一状态下的外观,只要在脚本中修改这个字符串属性的值就可以了,当然首先必须存在可链的新的外观库项目。
了解了这样一个组件外观机制以后,组件外观的修改就变的非常简单。其关键就是修改或重新定义一组新的外观库项目并指定其链接名,然后修改组件类文件中指定组件外观的属性。开发者可以在组件实例的初始化事件(initialize)中修改组件实例的外观。修组件所有实例外观的方法比较多,例如_root的第一帧使用ClassName. prototype.stateName=value语句,该语句也可以直接在#initclip和#endinitclip代码块中使用;另外还可以使用类继承的方式,在组件初始化时就为组件外观链接属性指定新的值,这里也需要用到#initclip、#endinitclip代码块。#initclip和#endinitclip是Flash的编译器命令,作为初始化代码块的开始标记和结束标记。只要符号(symbol)被定义,那么初始化代码就被先于第一帧执行,而且紧执行一次。所以在这个代码块中,可以为整个组件类指定不同状态下的外观。
具体创建
简介
创建组件就是自行设计制作出新的组件。 设计组件是一项繁重的工作。自行开发组件与使用组件进行可视化程序开发存在着极大的不同,要求程序员熟知原有的VCL类库结构,精通面向对象程序设计。设计组件是一项艰苦的工作。对于组件的开发者,组件是纯粹的代码。组件的开发不是一个可视化的开发过程,而是用C++或Object Pascal严格编制代码的工作。实际上,创建新组件使我们回到传统开发工具的时代。虽然这是一个复杂的过程,但也是一个一劳永逸的过程。创建组件的最大意义在于封装重复的工作,其次是可以扩充现有组件的功能。组件创建过程包括设计、开发、调试(就是所谓的3D's)工作,然后是组件的使用。组件开发者应该掌握的三项主要内容是:属性、事件和方法。
组件源文件
"组件"面板中提供的组件都是预编译过的 SWC 剪辑。同时还提供了源 Flash 文档 (FLA)(其中包括的是这些组件的图形)和源 ActionScript 类文件(AS)(其中包含的是这些组件的代码),以便于您在创建自已的自定义组件时使用。第 2 版组件的源文件随 Macromedia Flash 一起安装。在构建自己的组件之前,打开并查看其中部分文件,尝试去了解这些文件的结构,会对您有所帮助。RadioButton 组件就是较为简单的组件的示例,您可能应首先研究该组件。StandardComponents.fla 的库中的所有组件都是元件。每个元件都链接到一个 ActionScript 类。它们的位置如下:
FLA文件源代码在 Windows 中:C:Program FilesMacromediaFlash 8语言ConfigurationComponentFLAStandardComponents.fla。 在 Macintosh 上:HD/Applications/Macromedia Flash 8/Configuration/ComponentFLA/StandardComponents.fla ActionScript 类文件在 Windows 中:C:Program FilesMacromediaFlash 8语言First RunClassesmx 在 Macintosh 上:HD/Applications/Macromedia Flash 8/First Run/Classes/mx
组件结构概述
组件由 Flash (FLA)文件和 ActionScript (AS)文件组成。您可以选择创建其它文件(例如,图标和 .swd 调试文件),并将其与组件一起打包,但所有组件都需要一个 FLA 文件和一个 ActionScript 文件。完成组件开发后,需要将它导出为 SWC 文件。
Flash (FLA)文件、ActionScript (AS) 文件和 SWC 文件FLA文件包含一个影片剪辑元件,该元件必须在"链接属性"和"组件定义"对话框中链接到 AS 文件。
影片剪辑元件有两个帧和两个图层。第一个图层是 Actions 图层,它的第一帧上有一个 stop()全局函数。第二个图层是 Assets 图层,它有两个关键帧:第一帧包含一个边框,第二帧包含所有其它资源,其中包括组件使用的图形和基类。
指定组件的属性和方法的 ActionScript 代码位于单独的 ActionScript 类文件中。此类文件还声明组件的扩展的类(如果有)。AS 类文件的名称为组件的名称加上".as"扩展名。例如,MyComponent 包含 MyComponent 组件的源代码。
最好将组件的 FLA 和 AS文件保存在同一文件夹并将这两个文件指定为相同的名称。如果将 AS文件保存在其它文件夹中,则必须确认该文件夹在类路径中,以便 FLA 文件能够找到它。有关类路径的详细信息,请参阅"学习 Flash 中的 ActionScript 2.0"中的类。
构建第一个组件
在本节中,将构建一个 Dial 组件。已完成的组件文件Dial.fla、Dial 和 DialAssets.fla 位于计算机上的以下示例文件夹中:
在 Windows 中:C:Program FilesMacromediaFlash 8Samples and TutorialsSamplesComponentsDialComponent文件夹。
在 Macintosh 上:HD/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/Components/DialComponent文件夹。
Dial 组件是一个电位计,类似于测量电压差的电位计。用户可以单击并拖动指针来更改指针位置。Dial 组件的 API 具有一个 value 属性,可用来获取和设置指针的位置。
选择父类
创建组件时,首先要确定是否扩展某个第 2 版类。如果选择扩展某个第 2 版类,则可以扩展某个组件类(例如,Button、CheckBox、ComboBox、List 等)或某个基类(UIObject 或 UIComponent)。除 Media 组件之外,所有其它组件类都扩展基类;如果扩展组件类,该类也会自动从基类继承。
两个基类为组件提供了常见功能。通过扩展这些类,组件一开始即具备一组基本的方法、属性和事件。
在第 2 版框架中,您无需创建 UIObject 子类、UIComponent 子类或任何其它类。即使组件类直接继承自 MovieClip 类,也可以使用许多强大的组件功能:导出到 SWC文件或编译剪辑、使用内置实时预览、查看可检查属性等等。但是,如果要将组件用于 Macromedia 第 2 版组件,并要使用管理器类,就需要扩展 UIObject 或 UIComponent。
下表简要说明第 2 版基类:
基类
扩展
说明
mx.core.UIObject
MovieClip
UIObject 是所有图形对象的基类。
mx.core.UIComponent
UIObject
UIComponent 是所有组件的基类。
了解 UIObject 类
基于 Macromedia ComponentArchitecture第 2 版的组件源自 UIObject 类,该类是 MovieClip 类的子类。MovieClip 类是 Flash 中可以在屏幕上表示可视对象的所有类的基类。
UIObject 添加用于处理样式和事件的方法。它在加载和卸载时(load 和 unload)、布局更改时(move、resize)以及隐藏或显示时(hide和 reveal),都会在绘制(draw 事件等效于 MovieClip.onEnterFrame 事件)之前将事件发送到它的侦听器。
UIObject 另外提供只读变量来确定组件的位置和大小(width、height、x、y),并提供 move() 和 setSize() 方法来改变对象的位置和大小。
UIObject 类实现以下功能:
样式
事件
按缩放比例调整大小
了解 UIComponent 类
UIComponent 类是 UIObject 的子类(请参阅"组件语言参考"中的UIComponent 类)。它是处理用户交互(鼠标和键盘输入)的所有组件的基类。UIComponent 类允许组件执行以下操作:
接收焦点和键盘输入
启用和禁用组件
按布局调整大小
关于扩展其它第 2 版类
为了能够更方便地构造组件,可以扩展任何类的子类,这样也就不需要直接扩展 UIObject 或 UIComponent 类。如果扩展任何其它第 2 版组件类(Media 组件除外),默认情况下也会扩展 UIObject 和 UIComponent。您可以通过扩展"组件"字典中列出的任何组件类来创建新组件类。
例如,如果要创建一个组件,其行为与 Button 组件的行为几乎相同,就可以扩展 Button 类,而不必从基类重新创建 Button 类的所有功能。
下图显示了第 2 版组件的层次结构:
此文件的 FlashPaper 版本可在 Flash安装目录的以下位置找到:Flash 8Samples and TutorialsSamplesComponentsarch_diagram.swf。
关于扩展 MovieClip 类
您可以选择不扩展第 2 版类,而让组件直接继承 ActionScript MovieClip 类。但是,如果需要 UIObject 和 UIComponent 的任何功能,则必须亲自构建。您可以打开 UIObject 和 UIComponent 类 (First Run/Classes/mx/core) 来检查它们的构造方式。
创建组件影片剪辑
若要创建一个组件,必须创建一个影片剪辑元件并将它链接到该组件的类文件。
影片剪辑有两个帧和两个图层。第一个图层是 Actions 图层,它的第一帧上有一个 stop() 全局函数。第二个图层是 Assets 图层,它有两个关键帧。第一帧包含一个边框或充当最终图片的占位符的任意图形。第二帧包含所有其它资源,包括组件使用的图形和基类。
插入新的影片剪辑元件
所有组件都是 MovieClip 对象。要创建新组件,首先必须将新元件插入新的 FLA 文件中。
添加新组件元件:
在 Flash 中,创建空白的 Flash 文档。
选择"插入">"新建元件"。
显示"创建新元件"对话框。
输入元件名称。为组件命名,方法是将组件中每个单词的第一个字母更改为大写字母(例如 MyComponent)。
选择"影片剪辑"行为。
单击"高级"按钮显示高级设置。
选择"为 ActionScript 导出",取消选择"在第一帧导出"。
输入链接标识符。
在"AS 2.0 类"文本框中,输入 ActionScript 2.0 类的完全限定路径。
类名称应与显示在"组件"面板中的组件名称相同。例如,Button 组件的类为 mx.controls.Button。
注意
不要包含文件扩展名;"AS 2.0 类"文本框指向类的打包位置,而不是该文件的文件系统名称。
如果 ActionScript文件位于包内,必须包含该包的名称。此值可以是类路径的相对路径,也可以是包的绝对路径(例如 mypackage.MyComponent)。
大多数情况下,应取消选中"在第一帧导出"(默认选中该选项)。有关详细信息,请参阅组件开发检查列表。
单击"确定"。
Flash 将元件添加到库中,然后切换到元件编辑模式。在此模式下,元件的名称显示于舞台左上角的上方,并且有一个十字线表明该元件的注册点。
您现在就可以编辑该元件以创建一个组件。请参阅编辑影片剪辑。
编辑影片剪辑
在创建新元件并为其定义链接后,即可在该元件的时间轴中定义组件的资源。
组件的元件应有两个图层。本节说明应该插入哪些图层,应该在这些图层上添加哪些内容。
若要编辑影片剪辑,请执行以下操作:
将图层1 重命名为动作,然后选择第一帧。
打开"动作"面板,然后添加 stop() 函数,如下所示: stop();
不要向此帧添加任何图形资源。
添加一个名为 Assets 的图层。
在 Assets图层上,选择第二帧并插入一个空白关键帧。
现在该图层上有两个空白关键帧。
请执行以下操作之一:
·如果组件具有定义边界区域的可视资源,则将这些元件拖到第一帧中并进行适当安排。
·如果组件在运行时创建其所有可视资源,请将一个 BoundingBox 元件拖到舞台上第一帧中,适当调整其大小,然后将实例命名为 boundingBox_mc。该元件位于 Configuration/ComponentFLA文件夹中的 StandardComponents.fla 的库中。
如果要扩展现有组件,请将该组件的一个实例和任何其它基类放在 Assets图层的第二帧中。
为此,请从"组件"面板中选择该元件并将它拖到舞台上。如果要扩展一个基类,请打开 Configuration/ComponentFLA 文件夹中的 StandardComponents.fla,然后将该类从库中拖到舞台上。
注意
将 UIComponent 拖到组件库时,会更改库中的文件夹层次结构。如果打算再次使用库,或将它用于其它组件组(如第 2 版组件),应重新组织文件夹层次结构,以便与 StandardComponents.fla 库匹配,从而使库组织有序,避免元件重复。
在组件的 Assets图层的第二帧添加由该组件使用的所有图形资源。
组件所使用的任何资源(无论是其它组件还是位图之类的媒体)都应具有一个放置在 Assets 图层的第二帧中的实例。
完成的元件看起来应与下图相似:
影片剪辑元件必须在"组件定义"对话框中链接到 ActionScript 类文件。这是 Flash 了解在何处查找组件元标记的方式。(有关元标记的详细信息,请参阅添加组件元数据。)您也可以在"组件定义"对话框中选择其它选项。
将影片剪辑定义为组件:
在库中选择影片剪辑,然后从"库"上下文菜单中选择"组件定义"(Windows:右键单击;Mac:按住 Control 键单击)。
必须输入一个 AS 2.0 类。
如果该类在包中,则输入完整的包名称。如果需要,可以在"组件定义"对话框中指定其它选项:
单击加号 (+) 按钮可定义参数。
此为可选操作。最好的做法是在组件的类文件中使用元数据Inspectable 标记来指定参数。如果未指定 ActionScript 2.0 类,则在这是一个在"组件"检查器中播放的 SWF文件。您可以将它嵌入组件 FLA文件或浏览到一个外部 SWF文件。
指定实时预览。
这是一个外部或嵌入的 SWF文件。此处无需指定实时预览;将一个边框添加到组件影片剪辑,Flash 即会为您创建实时预览。请参阅创建组件影片剪辑。
输入描述。
在 Flash MX 2004 中,由于"参考"面板已删除,因此不建议使用"描述"字段。提供此字段目的在于以 Flash MX 格式保存 FLA文件时的向后兼容性。
选择图标。
此选项指定一个 PNG文件来用作组件的图标。如果在 ActionScript 2.0 类文件中指定 IconFile元数据标记(最佳做法),则会忽略该字段。
选择或取消选择"实例中参数已锁定"。
如果取消选择此选项,用户则可以向每个组件实例添加不同于组件参数的参数。通常应选择此设置。此选项提供与 Flash MX 的向后兼容性。
指定显示在"组件"面板中的工具提示。
创建 ActionScript 类文件
所有组件元件都链接到 ActionScript 2.0 类文件。(有关链接的信息,请参阅创建组件影片剪辑。)
要编辑 ActionScript 类文件,您可以使用 Flash、任何文本编辑器,也可以使用任何"集成开发环境"(IDE)。
外部 ActionScript 类扩展其它类(无论该类是第 2 版组件、第 2 版基类还是 ActionScript MovieClip 类)。您应扩展所创建的功能与要创建的组件最类似的类。只能从一个类继承(扩展)。ActionScript 2.0 不允许多继承。
本节包含以下主题:
组件类文件的简单示例
组件类文件概述
定义类及其超类
标识类、元件和所有者名称
定义变量
使用 getter/setter 方法定义参数
添加组件元数据
定义组件参数
关于核心函数
发送事件
关于指定外观
关于样式
组件类文件的简单示例
下面是类文件的一个简单示例,该类文件名为 MyComponent。如果要创建此组件,应将该类文件链接到 Flash 中的组件影片剪辑。
此示例包含从 UIComponent 类继承的组件 MyComponent 至少应有的一组导入、方法和声明。MyComponents文件保存在 myPackage 文件夹中。
【Event("eventName")】
// 导入包。
import mx.core.UIObject;
// 声明类并从父类扩展。
classmypackage.MyComponent extends UIObject {
// 标识此类所绑定到的元件名称。
static var symbolName:String = "mypackage.MyComponent";
// 标识元件所有者的完全限定包名称。
static var symbolOwner:Object = Object(mypackage.MyComponent);
// 提供className 变量。
varclassName:String = "MyComponent";
// 定义一个空构造函数。
function MyComponent() {
}
// 调用父级的 init() 方法。
// 隐藏边框,该边框
// 仅在创作时使用。
function init():Void {
super.init();
boundingBox_mc.width = 0;
boundingBox_mc.height = 0;
boundingBox_mc.visible = false;
}
function createChildren():Void{
// 调用 createClassObject 来创建子对象。
size();
invalidate();
}
function size(){
// 编写处理大小的代码。
super.size();
invalidate();
}
function draw(){
// 编写处理可视化表示形式的代码。
super.draw();
}
}
组件类文件概述
以下是介绍如何为组件类创建 ActionScript文件的常规过程。根据所创建组件类型的不同,某些步骤是可选步骤。
编写组件类文件
(可选)导入类。(请参阅导入类)。
执行这一步骤,则无需写出包(例如,使用 Button 而不是 mx.controls.Button)即可引用类。 使用class关键字定义类;使用 extend 关键字扩展父类。(请参阅定义类及其超类)。
定义 symbolName、symbolOwner 和className 变量。(请参阅标识类、元件和所有者名称)。
只有第 2 版组件才需要这些变量。
定义成员变量。(请参阅定义变量)。
这些变量可用于 getter/setter 方法。
定义一个构造函数。(请参阅关于构造函数)。
定义 init() 方法。(请参阅定义 init() 方法)。
如果类扩展的是 UIComponent,则创建类时会调用此方法。如果类扩展的是 MovieClip,则从构造函数调用此方法。
定义 createChildren() 方法。(请参阅定义 createChildren() 方法)。
如果类扩展的是 UIComponent,则创建类时会调用此方法。如果类扩展的是 MovieClip,则从构造函数调用此方法。
定义 size() 方法。(请参阅定义 size() 方法)。
如果类扩展的是 UIComponent,则调整组件大小时调用此方法。此外,在创作时调整组件的实时预览大小时也会调用此方法。
定义 draw() 方法。(请参阅关于无效)。
如果类扩展的是 UIComponent,则组件无效时调用此方法。
添加一个元数据标记和声明。(请参阅添加组件元数据)。
添加标记和声明可使 getter/setter 属性显示在 Flash 的"属性 方法。(请参阅使用 getter/setter 方法定义参数)。
(可选)为组件中使用的每个外观元素/链接创建变量。(请参阅关于指定外观)。
执行这一步骤,用户则可通过更改组件中的参数来设置不同的外观元素。
在组件内组合现有组件
在本节中,您将构建一个可以组合 Label、TextInput 和 Button 组件的简单的 LogIn 组件。本教程演示如何在新组件中通过添加未经编译的 Flash (FLA) 库元件来组合现有组件。已完成的组件文件LogIn.fla、LogIn 和 LogIn.swf 位于硬盘上的以下示例文件夹中:
在 Windows 中:the C:Program FilesMacromediaFlash 8Samples and TutorialsSamplesComponentsLogin folder。
在 Macintosh 上:HD/Applications/Macromedia Flash 8/Samples and Tutorials/Samples/Components/Login文件夹。
LogIn 组件提供输入名称和密码的界面。LogIn 的 API 有两个属性 name 和 password,用来设置和获取名称和密码 TextInput 字段中的字符串值。LogIn 组件还将在用户单击标记为"LogIn"的按钮时发送一个"click"事件。
创建 LogIn Flash (FLA) 文件
LogIn 类文件
测试和导出 LogIn 组件
导出和分发组件
Flash 将组件导出为组件包(SWC 文件)。组件可以分发为 SWC文件或 FLA 文件。(有关将组件作为 FLA 分发的信息,请参阅 Macromedia DevNet 上的文章,
分发组件的最好方法是将它导出为 SWC文件,这是因为 SWC 文件包含全部 ActionScript、SWF 文件以及使用组件所需的其它可选文件。如果要同时开发某个组件和使用该组件的应用程序,则 SWC文件也十分有用。
SWC文件可用于分发在 Macromedia Flash 8、Macromedia Dreamweaver MX 2004 和 Macromedia Director MX 2004 中使用的组件。
无论开发组件的目的是为了供他人使用还是自己使用,对作为组件开发的正在进行部分的 SWC文件进行测试都非常重要。例如,组件的 FLA文件中不会出现的问题可能会在 SWC 文件中出现。
组件开发的最后一些步骤
组件创建完成并准备好打包之后,即可添加图标和工具提示。要确保已完成所有必需的步骤,请参阅组件开发检查列表。
本节包含以下主题:
· 添加图标
· 添加工具提示
· 组件开发检查列表
添加图标
您可以添加在 Flash 创作环境的"组件"面板中表示组件的图标。 添加组件的图标:
· 创建新图像。
图像必须为 18 x 18像素,并且必须保存为 PNG 格式。它的 Alpha 透明度必须是 8 位,左上角的像素必须是透明的,以支持遮罩。
· 在组件 ActionScript 类文件中的类定义之前添加以下定义: 【IconFile("component_name.png")】
· 将图像添加到 FLA文件所在的目录。在导出 SWC文件时,Flash 将在归档的根级包含该图像。
添加工具提示
当用户将鼠标滚到 Flash 创作环境中"组件"面板上的组件名称或图标上时,工具提示就会显示出来。
在"组件定义"对话框中可以定义工具提示。可以从组件 FLA 文件的"库"选项菜单访问此对话框(Windows:右键单击;Mac:按住 Control 键单击)。
在"组件定义"对话框中添加工具提示:
在 Flash 中打开组件的 FLA文件时,确保"库"可见("窗口">"库"菜单)。
单击"库"选项菜单(Windows:右键单击;Mac:按住 Control 键单击)。
"库"选项菜单位于"库"标题栏的右侧,显示为一个三条线和向下三角形的图标。
选择"组件定义"选项。
在"组件定义"对话框的"选项"下,选择"显示在'组件'面板中"。
"工具"提示文本框即会变为可编辑文本框。
在"工具"提示文本框中输入组件的工具提示文本。
单击"确定"以保存更改。