组件
Aluhao · 2010-03-03 21:21 · 25275 次点击
组件(Component)是对数据和方法的简单封装。C++Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。
组件是C++Builder环境中最令人激动的部分。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。VCL和CLX组件是C++Builder系统的核心。
目录
(Component)概念
(Component)应用
创建
(Component)概念
简而言之,组件就是对象。C++Builder中叫组件,Delphi中叫部件,而在VisualBASIC中叫控件。
组件是对数据和方法的简单封装。C++Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。
组件是C++Builder环境中最令人激动的部分。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。VCL和CLX组件是C++Builder系统的核心。
(Component)应用
使用现成的组件来开发应用程序时,组件工作在两种模式下:设计时态和运行时态。
在设计时态下,组件显示在C++Builder窗体编辑器下的一个窗体中。设计时态下组件的方法不能被调用,组件不能与最终用户直接进行交互操作,也不需要实现组件的全部功能。
在运行状态下,组件工作在一个确实已经运行的应用程序中。组件必须正确地将自身表示出来,它需要对方法的调用进行处理并实现与其他组件之间有效的协同工作。
设计时态下所有的组件在窗体中都是可见的,但在运行时态下不一定可见。如TTable、TQuery和TDataSet在运行时态下就不可见,但他们均完成了重要的功能。
例:Flash组件应用与开发
(一)、Flash组件概述
组件是带有参数的电影剪辑,这些参数可以用来修改组件的外观和行为。每个组件都有预定义的参数,并且它们可以被设置。每个组件还有一组属于自己的方法、属性和事件,它们被称为应用程序程接口(ApplicationProgrammingInterface,API)。使用组件,可以使程序设计与软件界面设计分离,提高代码的可复用性。FlashMX2004或FlashMXProfessional2004中包含的组件不是FLA文件,而是SWC文件。SWC是用于组件的Macromedia文件格式。库项目中的电影剪辑可以被预编译成swf文件。这样可以缩短影片测试和发布的执行时间。将SWC文件拷贝到FirstRunComponents目录后,该组件便会出现在“组件”面板中。
(二)、组件基类
Flash自带的组件都位于mx.controls包中。组件直接或间接继承于UIComponent类,UIComponent类对UIObject类做了扩展,而UIObject类又是MovieClip类的子类。MovieClip类不属于任何包,定义文件位于FlashInstalDirenFirstRunClasses目录。UIComponent类和UIObject类都位于mx.core包中,定义文件位于FlashInstalDirenFirstRunClassesmxcore目录。
UIObject类对MovieClip类进行封装,所有FlashV2组件都可以共享它的方法、属性和事件。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类一样,所有FlashV2组件都可以共享它的方法和属性。它实现了组件的焦点获取、键盘输入,组件的禁用和启用以及组件的按布局调整自动大小。
UIComponent类的主要方法有:
·getFocus方法:利用焦点管理器(Selection)返回一个当前获取焦点的对象的引用。
·setFocus方法:使组件获取焦点。
UIComponent类的enabled属性指定组件实例是否可用;tabIndex属性指定组件的焦点获取顺序。UIComponent类还定义一系列焦点和键盘事件:焦点获取事件(focusIn),焦点转移事件(focusOut)、键盘按下事件(keyDown)和键盘释放事件(keyUp)。
(三)、FlashV2组件的基本使用方法
在FlashMX2004和FlashMXProfessional2004自带了一套组件称为FlashV2组件,它是从FlashMX的V1组件升级而来的,V1组件和V2组件尽量不要一起使用以免发生一些错误。V2组件支持实时预览,使开发者在编辑状态下就能看到组件的外观效果。开发者可以自行设置是否需要实时预览和实时预览的模式,以节省计算机资源。在ControlàEnableLivePreview菜单设置是否使用实时预览,在ViewàPriviewMode菜单选择预览模式。组件实质上是一些被编译好的电影剪辑,其格式为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()方法结合使用来自定义样式:
//创建一个样式对象
varstyleObj=newmx.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。
另一方面,为了更好的使用组件,还需要修改或重新定义组件外观。FlashV2的外观定义文件位于FlashInstralDirenFirstRunComponentFLA文件夹下。在修改外观时,需要把原始的外观定义文件作为外部库导入(FileàOpenExternalLibrary),并把外部库中的外观定义库项目拖到当前文档的库中,外观库项目通常都是电影剪辑(MovieClip)。每一个组件外观定义库项目文件夹中都包含一个States文件夹,其中定义了组件在不同状态下的外观,每一个状态都指定了一个链接名(linkageName)作为脚本引用,如果修改了这个名称,则会使组件在该状态下的外观加载发生错误。在组件的类文件中,每一个状态都使用一个字符串属性指定其外观库项目的链接名,如果要重新定义组件某一状态下的外观,只要在脚本中修改这个字符串属性的值就可以了,当然首先必须存在可链的新的外观库项目。
了解了这样一个组件外观机制以后,组件外观的修改就变的非常简单。其关键就是修改或重新定义一组新的外观库项目并指定其链接名,然后修改组件类文件中指定组件外观的属性。开发者可以在组件实例的初始化事件(initialize)中修改组件实例的外观。修组件所有实例外观的方法比较多,例如_root的第一帧使用ClassName.prototype.stateName=value语句,该语句也可以直接在#initclip和#endinitclip代码块中使用;另外还可以使用类继承的方式,在组件初始化时就为组件外观链接属性指定新的值,这里也需要用到#initclip、#endinitclip代码块。#initclip和#endinitclip是Flash的编译器命令,作为初始化代码块的开始标记和结束标记。只要符号(symbol)被定义,那么初始化代码就被先于第一帧执行,而且紧执行一次。所以在这个代码块中,可以为整个组件类指定不同状态下的外观。
创建
创建组件就是自行设计制作出新的组件。
设计组件是一项繁重的工作。自行开发组件与使用组件进行可视化程序开发存在着极大的不同,要求程序员熟知原有的VCL类库结构,精通面向对象程序设计。
设计组件是一项艰苦的工作。对于组件的开发者,组件是纯粹的代码。组件的开发不是一个可视化的开发过程,而是用C++或ObjectPascal严格编制代码的工作。实际上,创建新组件使我们回到传统开发工具的时代。虽然这是一个复杂的过程,但也是一个一劳永逸的过程。
创建组件的最大意义在于封装重复的工作,其次是可以扩充现有组件的功能。
组件创建过程包括设计、开发、调试(就是所谓的3D's)工作,然后是组件的使用。
组件开发者应该掌握的三项主要内容是:属性、事件和方法。
1、组件源文件
组件"面板中提供的组件都是预编译过的SWC剪辑。同时还提供了源Flash文档(FLA)(其中包括的是这些组件的图形)和源ActionScript类文件(AS)(其中包含的是这些组件的代码),以便于您在创建自已的自定义组件时使用。第2版组件的源文件随MacromediaFlash一起安装。在构建自己的组件之前,打开并查看其中部分文件,尝试去了解这些文件的结构,会对您有所帮助。RadioButton组件就是较为简单的组件的示例,您可能应首先研究该组件。StandardComponents.fla的库中的所有组件都是元件。每个元件都链接到一个ActionScript类。它们的位置如下:
FLA文件源代码
在Windows中:C:ProgramFilesMacromediaFlash8语言ConfigurationComponentFLAStandardComponents.fla。
在Macintosh上:HD/Applications/MacromediaFlash8/Configuration/ComponentFLA/StandardComponents.fla
ActionScript类文件
在Windows中:C:ProgramFilesMacromediaFlash8语言FirstRunClassesmx
在Macintosh上:HD/Applications/MacromediaFlash8/FirstRun/Classes/mx
2、组件结构概述
组件由Flash(FLA)文件和ActionScript(AS)文件组成。您可以选择创建其它文件(例如,图标和.swd调试文件),并将其与组件一起打包,但所有组件都需要一个FLA文件和一个ActionScript文件。完成组件开发后,需要将它导出为SWC文件。
data/attachment/portal/201111/06/1405080l33v3md2llmh3hv.jpg
Flash(FLA)文件、ActionScript(AS)文件和SWC文件
data/attachment/portal/201111/06/140508t3mfwem78epmtt8q.jpg
FLA文件包含一个影片剪辑元件,该元件必须在"链接属性"和"组件定义"对话框中链接到AS文件。
影片剪辑元件有两个帧和两个图层。第一个图层是Actions图层,它的第一帧上有一个stop()全局函数。第二个图层是Assets图层,它有两个关键帧:第一帧包含一个边框,第二帧包含所有其它资源,其中包括组件使用的图形和基类。
指定组件的属性和方法的ActionScript代码位于单独的ActionScript类文件中。此类文件还声明组件的扩展的类(如果有)。AS类文件的名称为组件的名称加上".as"扩展名。例如,MyComponent.as包含MyComponent组件的源代码。
最好将组件的FLA和AS文件保存在同一文件夹并将这两个文件指定为相同的名称。如果将AS文件保存在其它文件夹中,则必须确认该文件夹在类路径中,以便FLA文件能够找到它。有关类路径的详细信息,请参阅"学习Flash中的ActionScript2.0"中的类。
3、构建第一个组件
在本节中,将构建一个Dial组件。已完成的组件文件Dial.fla、Dial.as和DialAssets.fla位于计算机上的以下示例文件夹中:
在Windows中:C:ProgramFilesMacromediaFlash8SamplesandTutorialsSamplesComponentsDialComponent文件夹。
在Macintosh上:HD/Applications/MacromediaFlash8/SamplesandTutorials/Samples/Components/DialComponent文件夹。
Dial组件是一个电位计,类似于测量电压差的电位计。用户可以单击并拖动指针来更改指针位置。Dial组件的API具有一个value属性,可用来获取和设置指针的位置。
4、选择父类
创建组件时,首先要确定是否扩展某个第2版类。如果选择扩展某个第2版类,则可以扩展某个组件类(例如,Button、CheckBox、ComboBox、List等)或某个基类(UIObject或UIComponent)。除Media组件之外,所有其它组件类都扩展基类;如果扩展组件类,该类也会自动从基类继承。
两个基类为组件提供了常见功能。通过扩展这些类,组件一开始即具备一组基本的方法、属性和事件。
在第2版框架中,您无需创建UIObject子类、UIComponent子类或任何其它类。即使组件类直接继承自MovieClip类,也可以使用许多强大的组件功能:导出到SWC文件或编译剪辑、使用内置实时预览、查看可检查属性等等。但是,如果要将组件用于Macromedia第2版组件,并要使用管理器类,就需要扩展UIObject或UIComponent。
下表简要说明第2版基类:
基类
扩展
说明
mx.core.UIObject
MovieClip
UIObject是所有图形对象的基类。它可以有形状、可以自己进行绘制,还可以是不可见的。
UIObject提供以下功能:
编辑样式
事件处理
按缩放比例调整大小
mx.core.UIComponent
UIObject
UIComponent是所有组件的基类。
UIComponent提供以下功能:
创建焦点导航
创建Tab键切换方案
启用和禁用组件
调整组件大小
处理低级鼠标和键盘事件
了解UIObject类
基于MacromediaComponentArchitecture第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版组件的层次结构:
data/attachment/portal/201111/06/1405088or8y48ssjqqlebc.jpg
第2版组件层次结构
此文件的FlashPaper版本可在Flash安装目录的以下位置找到:Flash8SamplesandTutorialsSamplesComponentsarch_diagram.swf。
关于扩展MovieClip类
您可以选择不扩展第2版类,而让组件直接继承ActionScriptMovieClip类。但是,如果需要UIObject和UIComponent的任何功能,则必须亲自构建。您可以打开UIObject和UIComponent类(FirstRun/Classes/mx/core)来检查它们的构造方式。
5、创建组件影片剪辑
若要创建一个组件,必须创建一个影片剪辑元件并将它链接到该组件的类文件。
影片剪辑有两个帧和两个图层。第一个图层是Actions图层,它的第一帧上有一个stop()全局函数。第二个图层是Assets图层,它有两个关键帧。第一帧包含一个边框或充当最终图片的占位符的任意图形。第二帧包含所有其它资源,包括组件使用的图形和基类。
插入新的影片剪辑元件
所有组件都是MovieClip对象。要创建新组件,首先必须将新元件插入新的FLA文件中。
添加新组件元件:
在Flash中,创建空白的Flash文档。
选择"插入"新建元件"。
显示"创建新元件"对话框。
输入元件名称。为组件命名,方法是将组件中每个单词的第一个字母更改为大写字母(例如MyComponent)。
选择"影片剪辑"行为。
单击"高级"按钮显示高级设置。
选择"为ActionScript导出",取消选择"在第一帧导出"。
输入链接标识符。
在"AS2.0类"文本框中,输入ActionScript2.0类的完全限定路径。
类名称应与显示在"组件"面板中的组件名称相同。例如,Button组件的类为mx.controls.Button。
注意
不要包含文件扩展名;"AS2.0类"文本框指向类的打包位置,而不是该文件的文件系统名称。
如果ActionScript文件位于包内,必须包含该包的名称。此值可以是类路径的相对路径,也可以是包的绝对路径(例如mypackage.MyComponent)。
大多数情况下,应取消选中"在第一帧导出"(默认选中该选项)。有关详细信息,请参阅组件开发检查列表。
单击"确定"。
Flash将元件添加到库中,然后切换到元件编辑模式。在此模式下,元件的名称显示于舞台左上角的上方,并且有一个十字线表明该元件的注册点。
您现在就可以编辑该元件以创建一个组件。请参阅编辑影片剪辑。
编辑影片剪辑
在创建新元件并为其定义链接后,即可在该元件的时间轴中定义组件的资源。
组件的元件应有两个图层。本节说明应该插入哪些图层,应该在这些图层上添加哪些内容。
若要编辑影片剪辑,请执行以下操作:
将图层1重命名为动作,然后选择第一帧。
打开"动作"面板,然后添加stop()函数,如下所示:stop();
不要向此帧添加任何图形资源。
添加一个名为Assets的图层。
在Assets图层上,选择第二帧并插入一个空白关键帧。
现在该图层上有两个空白关键帧。
请执行以下操作之一:
·如果组件具有定义边界区域的可视资源,则将这些元件拖到第一帧中并进行适当安排。
·如果组件在运行时创建其所有可视资源,请将一个BoundingBox元件拖到舞台上第一帧中,适当调整其大小,然后将实例命名为boundingBox_mc。该元件位于Configuration/ComponentFLA文件夹中的StandardComponents.fla的库中。
data/attachment/portal/201111/06/1405081m3nmjrbcmasl1mr.jpg
如果要扩展现有组件,请将该组件的一个实例和任何其它基类放在Assets图层的第二帧中。
为此,请从"组件"面板中选择该元件并将它拖到舞台上。如果要扩展一个基类,请打开Configuration/ComponentFLA文件夹中的StandardComponents.fla,然后将该类从库中拖到舞台上。
注意
将UIComponent拖到组件库时,会更改库中的文件夹层次结构。如果打算再次使用库,或将它用于其它组件组(如第2版组件),应重新组织文件夹层次结构,以便与StandardComponents.fla库匹配,从而使库组织有序,避免元件重复。
在组件的Assets图层的第二帧添加由该组件使用的所有图形资源。
组件所使用的任何资源(无论是其它组件还是位图之类的媒体)都应具有一个放置在Assets图层的第二帧中的实例。
完成的元件看起来应与下图相似:
data/attachment/portal/201111/06/140508j7iwbqb13y77ljsi.jpg
将影片剪辑定义为组件
影片剪辑元件必须在"组件定义"对话框中链接到ActionScript类文件。这是Flash了解在何处查找组件元标记的方式。(有关元标记的详细信息,请参阅添加组件元数据。)您也可以在"组件定义"对话框中选择其它选项。
将影片剪辑定义为组件:
在库中选择影片剪辑,然后从"库"上下文菜单中选择"组件定义"(Windows:右键单击;Mac:按住Control键单击)。
必须输入一个AS2.0类。
如果该类在包中,则输入完整的包名称。
如果需要,可以在"组件定义"对话框中指定其它选项:
单击加号(+)按钮可定义参数。
此为可选操作。最好的做法是在组件的类文件中使用元数据Inspectable标记来指定参数。如果未指定ActionScript2.0类,则在这是一个在"组件"检查器中播放的SWF文件。您可以将它嵌入组件FLA文件或浏览到一个外部SWF文件。
指定实时预览。
这是一个外部或嵌入的SWF文件。此处无需指定实时预览;将一个边框添加到组件影片剪辑,Flash即会为您创建实时预览。请参阅创建组件影片剪辑。
输入描述。
在FlashMX2004中,由于"参考"面板已删除,因此不建议使用"描述"字段。提供此字段目的在于以FlashMX格式保存FLA文件时的向后兼容性。
选择图标。
此选项指定一个PNG文件来用作组件的图标。如果在ActionScript2.0类文件中指定IconFile元数据标记(最佳做法),则会忽略该字段。
选择或取消选择"实例中参数已锁定"。
如果取消选择此选项,用户则可以向每个组件实例添加不同于组件参数的参数。通常应选择此设置。此选项提供与FlashMX的向后兼容性。
指定显示在"组件"面板中的工具提示。
6、创建ActionScript类文件
所有组件元件都链接到ActionScript2.0类文件。(有关链接的信息,请参阅创建组件影片剪辑。)
要编辑ActionScript类文件,您可以使用Flash、任何文本编辑器,也可以使用任何"集成开发环境"(IDE)。
外部ActionScript类扩展其它类(无论该类是第2版组件、第2版基类还是ActionScriptMovieClip类)。您应扩展所创建的功能与要创建的组件最类似的类。只能从一个类继承(扩展)。ActionScript2.0不允许多继承。
本节包含以下主题:
组件类文件的简单示例
组件类文件概述
定义类及其超类
标识类、元件和所有者名称
定义变量
使用getter/setter方法定义参数
添加组件元数据
定义组件参数
关于核心函数
发送事件
关于指定外观
关于样式
组件类文件的简单示例
下面是类文件的一个简单示例,该类文件名为MyComponent.as。如果要创建此组件,应将该类文件链接到Flash中的组件影片剪辑。
此示例包含从UIComponent类继承的组件MyComponent至少应有的一组导入、方法和声明。MyComponents.as文件保存在myPackage文件夹中。
【Event("eventName")】
//导入包。
importmx.core.UIObject;
//声明类并从父类扩展。
classmypackage.MyComponentextendsUIObject{
//标识此类所绑定到的元件名称。
staticvarsymbolName:String="mypackage.MyComponent";
//标识元件所有者的完全限定包名称。
staticvarsymbolOwner:Object=Object(mypackage.MyComponent);
//提供className变量。
varclassName:String="MyComponent";
//定义一个空构造函数。
functionMyComponent(){
}
//调用父级的init()方法。
//隐藏边框,该边框
//仅在创作时使用。
functioninit():Void{
super.init();
boundingBox_mc.width=0;
boundingBox_mc.height=0;
boundingBox_mc.visible=false;
}
functioncreateChildren():Void{
//调用createClassObject来创建子对象。
size();
invalidate();
}
functionsize(){
//编写处理大小的代码。
super.size();
invalidate();
}
functiondraw(){
//编写处理可视化表示形式的代码。
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方法定义参数)。
(可选)为组件中使用的每个外观元素/链接创建变量。(请参阅关于指定外观)。
执行这一步骤,用户则可通过更改组件中的参数来设置不同的外观元素。
8、在组件内组合现有组件
在本节中,您将构建一个可以组合Label、TextInput和Button组件的简单的LogIn组件。本教程演示如何在新组件中通过添加未经编译的Flash(FLA)库元件来组合现有组件。已完成的组件文件LogIn.fla、LogIn.as和LogIn.swf位于硬盘上的以下示例文件夹中:
在Windows中:theC:ProgramFilesMacromediaFlash8SamplesandTutorialsSamplesComponentsLoginfolder。
在Macintosh上:HD/Applications/MacromediaFlash8/SamplesandTutorials/Samples/Components/Login文件夹。
LogIn组件提供输入名称和密码的界面。LogIn的API有两个属性name和password,用来设置和获取名称和密码TextInput字段中的字符串值。LogIn组件还将在用户单击标记为"LogIn"的按钮时发送一个"click"事件。
创建LogInFlash(FLA)文件
LogIn类文件
测试和导出LogIn组件
8、导出和分发组件
Flash将组件导出为组件包(SWC文件)。组件可以分发为SWC文件或FLA文件。(有关将组件作为FLA分发的信息,请参阅MacromediaDevNet上的文章,网址为www.macromedia.com/support/flash/applications/creating_comps/creating_comps12.html。)
分发组件的最好方法是将它导出为SWC文件,这是因为SWC文件包含全部ActionScript、SWF文件以及使用组件所需的其它可选文件。如果要同时开发某个组件和使用该组件的应用程序,则SWC文件也十分有用。
SWC文件可用于分发在MacromediaFlash8、MacromediaDreamweaverMX2004和MacromediaDirectorMX2004中使用的组件。
无论开发组件的目的是为了供他人使用还是自己使用,对作为组件开发的正在进行部分的SWC文件进行测试都非常重要。例如,组件的FLA文件中不会出现的问题可能会在SWC文件中出现。
9、组件开发的最后一些步骤
组件创建完成并准备好打包之后,即可添加图标和工具提示。要确保已完成所有必需的步骤,请参阅组件开发检查列表。
本节包含以下主题:
·添加图标
·添加工具提示
·组件开发检查列表
添加图标
您可以添加在Flash创作环境的"组件"面板中表示组件的图标。
添加组件的图标:
·创建新图像。
图像必须为18x18像素,并且必须保存为PNG格式。它的Alpha透明度必须是8位,左上角的像素必须是透明的,以支持遮罩。
·在组件ActionScript类文件中的类定义之前添加以下定义:【IconFile("component_name.png")】
·将图像添加到FLA文件所在的目录。在导出SWC文件时,Flash将在归档的根级包含该图像。
添加工具提示
当用户将鼠标滚到Flash创作环境中"组件"面板上的组件名称或图标上时,工具提示就会显示出来。
在"组件定义"对话框中可以定义工具提示。可以从组件FLA文件的"库"选项菜单访问此对话框(Windows:右键单击;Mac:按住Control键单击)。
在"组件定义"对话框中添加工具提示:
在Flash中打开组件的FLA文件时,确保"库"可见("窗口"库"菜单)。
单击"库"选项菜单(Windows:右键单击;Mac:按住Control键单击)。
库"选项菜单位于"库"标题栏的右侧,显示为一个三条线和向下三角形的图标。
选择"组件定义"选项。
在"组件定义"对话框的"选项"下,选择"显示在'组件'面板中"。
工具"提示文本框即会变为可编辑文本框。
在"工具"提示文本框中输入组件的工具提示文本。
单击"确定"以保存更改。