欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 科普文章

组件

科普小知识2022-10-07 17:51:28
...

组件(Component)是对数据和方法的简单封装。C++Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。VCL和CLX组件是C++Builder系统的核心。

1、基本释义

组件

zǔjiàn

1.∶供装配整台机器、构件或元件的零件组合2.∶在电子或机械设备中组装在一起形成一个功能单元的一组元件3.∶组装产品(如书橱或碗橱)时所组合的通常或多或少重复的部分4.∶可被组装或被重新组装的几个部件之一。

2、基本概念

简而言之,组件就是对象。C++Builder中叫组件,Delphi中叫部件,而在VisualBASIC中叫控件。

组件是对数据和方法的简单封装。C++Builder中,一个组件就是一个从TComponent派生出来的特定对象。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。

对象管理小组(ObjectManagementGroup,OMG)的“建模语言规范”中将组件定义为:“系统中一种物理的、可代替的部件、它封装了实现并提供了一系列可用的接口。一个组件代表一个系统中实现的物理部分,包括软件代码(源代码,二进制代码,可执行代码)或者一些类似内容,如脚本或者命令文件。”

组件分类

组件并不是很复杂,.NET为我们提供了丰富的底层支持。如果有MFC或者API图形界面的开发心得,那么学会.net组件可能只需要很短的时间就够了。自己开发的组件通常有三种类型:复合组件(CompositeControls),扩展组件(ExtendedControls),自定义组件(CustomControls)。

复合组件:将现有的各种组件组合起来,形成一个新的组件,将集中组件的性能集中起来。

扩展组件:在现有组件的组件的入门上派生出一个新的组件,为原有组件增加新的性能或者更改原有组件的控能。

自定义组件:直接从System.作windows.Forms.Control类派生出来。Control类提供组件所需要的所有入门性能,包括键盘和鼠标的事件处理。自定义组件是最灵活最强大的办法,但是对开发者的要求也比较高,你必须为Control类的OnPaint事件写源代码,你也可以重写Control类的WndProc办法,处理更底层的作windows消息,所以你应该学习GDI+和作windowsAPI。

第三方控件

组件开发者应该掌握的三项主要内容是:属性、事件和方法。

由于组件开发复杂度较高,专业第三方控件会重写或者拓展了一些方法和属性,从而能实现某些新的功能,同时他们有较大的可定制性,可以根据使用者的需要设置不同的特性,从而完全适应特定项目的需求。常见的第三方控件包括表格控件、报表控件、用户界面控件等。

用户界面组件

用于开发构建用户界面(UI)的组件,帮助完成软件开发中视窗、文本框、按钮、下拉式菜单等界面元素的开发。

图表组件

用于开发图表的组件,帮助软件实现数据可视化,实现开发时较难独立完成的复杂图表。

代表:ComponentOneStudioChartforWinForm。

报表组件

用于开发报表的组件,在软件中实现报表的浏览查看、设计、编辑、打印等功能。

代表ActiveReports等。

表格组件

专门用于开发表格(CELL)的组件,主要实现网格中数据处理和操作的功能。

代表:FlexGrid、Spread等。

组件定义

卡耐基梅隆大学:

一个不透明的功能实体,能够被第三方组装,且符合一个构件模型。

计算机百科全书:

是软件系统中具有相对独立功能、接口由契约指定、和语境有明显依赖关系、可独立部署、可组装的软件实体。

软件构件著作:

是一个组装单元,它具有约定式规范的接口,以及明确的依赖环境。构建可以被独立的部署,由第三方组装。

3、产生背景

组件是近代工业发展的产物,兴起于20世纪初,目的是功能模块化,前提是接口标准化,好处是构成产品的各个功能组件,由更专业的厂商生产,提高了质量,降低了成本。而生产组件的厂商,同样的组件,可应用于多类产品和多个领域,极大地扩展了市场范围。

软件工程中的组件

4、具体应用

使用现成的组件来开发应用程序时,组件工作在两种模式下:设计时态和运行时态。在设计时态下,组件显示在C++Builder窗体编辑器下的一个窗体中。设计时态下组件的方法不能被调用,组件不能与最终用户直接进行交互操作,也不需要实现组件的全部功能。在运行状态下,组件工作在一个确实已经运行的应用程序中。组件必须正确地将自身表示出来,它需要对方法的调用进行处理并实现与其他组件之间有效的协同工作。设计时态下所有的组件在窗体中都是可见的,但在运行时态下不一定可见。如TTable、TQuery和TDataSet在运行时态下就不可见,但他们均完成了重要的功能。

Flash组件应用与开发

Flash组件概述

组件是带有参数的影片剪辑(Movieclip),这些参数可以用来修改组件的外观和行为。每个组件都有预定义的参数,并且它们可以被设置。每个组件还有一组属于自己的方法、属性和事件,它们被称为应用程序程接口(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)被定义,那么初始化代码就被先于第一帧执行,而且紧执行一次。所以在这个代码块中,可以为整个组件类指定不同状态下的外观。

5、具体创建

简介

创建组件就是自行设计制作出新的组件。 设计组件是一项繁重的工作。自行开发组件与使用组件进行可视化程序开发存在着极大的不同,要求程序员熟知原有的VCL类库结构,精通面向对象程序设计。设计组件是一项艰苦的工作。对于组件的开发者,组件是纯粹的代码。组件的开发不是一个可视化的开发过程,而是用C++或ObjectPascal严格编制代码的工作。实际上,创建新组件使我们回到传统开发工具的时代。虽然这是一个复杂的过程,但也是一个一劳永逸的过程。创建组件的最大意义在于封装重复的工作,其次是可以扩充现有组件的功能。组件创建过程包括设计、开发、调试(就是所谓的3D's)工作,然后是组件的使用。组件开发者应该掌握的三项主要内容是:属性、事件和方法。

组件源文件

"组件"面板中提供的组件都是预编译过的SWC剪辑。同时还提供了源Flash文档(FLA)(其中包括的是这些组件的图形)和源ActionScript类文件(AS)(其中包含的是这些组件的代码),以便于您在创建自已的自定义组件时使用。第2版组件的源文件随MacromediaFlash一起安装。在构建自己的组件之前,打开并查看其中部分文件,尝试去了解这些文件的结构,会对您有所帮助。RadioButton组件就是较为简单的组件的示例,您可能应首先研究该组件。StandardComponents.fla的库中的所有组件都是元件。每个元件都链接到一个ActionScript类。它们的位置如下:

FLA文件源代码在Windows中:C:ProgramFilesMacromediaFlash8语言ConfigurationComponentFLAStandardComponents.fla。在Macintosh上:HD/Applications/MacromediaFlash8/Configuration/ComponentFLA/StandardComponents.flaActionScript类文件在Windows中:C:ProgramFilesMacromediaFlash8语言FirstRunClAssesmx在Macintosh上:HD/Applications/MacromediaFlash8/FirstRun/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中的ActionScript2.0"中的类。

构建第一个组件

在本节中,将构建一个Dial组件。已完成的组件文件Dial.fla、Dial和DialAssets.fla位于计算机上的以下示例文件夹中:

在Windows中:C:ProgramFilesMacromediaFlash8SamplesandTutorialsSamplesComponentsDialComponent文件夹。

在Macintosh上:HD/Applications/MacromediaFlash8/SamplesandTutorials/Samples/Components/DialComponent文件夹。

Dial组件是一个电位计,类似于测量电压差的电位计。用户可以单击并拖动指针来更改指针位置。Dial组件的API具有一个value属性,可用来获取和设置指针的位置。