软件组件技术实验3Word下载.docx
- 文档编号:20813852
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:19
- 大小:384.31KB
软件组件技术实验3Word下载.docx
《软件组件技术实验3Word下载.docx》由会员分享,可在线阅读,更多相关《软件组件技术实验3Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
创建控件:
步骤1:
创建控件
从VCL类生成控件:
允许用户选择一个VCL类为基类
步骤1.1:
ChooseFile|New|OthertoopentheNewItemsdialogbox.
步骤1.2:
选中ActiveX属性页.
步骤1.3:
双击ActiveXControl图标或选中它后单击”OK”按钮
基于VCL类生成控件:
它以TActiveForm为基类
选择File|New|Other打开“NewItems”对话框,选中”ActiveX”属性页.
双击ActiveXForm图标或选中后单击”OK”按钮
•*XControl.*:
控件工程名,包含了启动控件所需的代码,一般不需要改变。
•_TLB.*:
类型库文件,定义了控件的CoClass类、面向客户的接口以及它们所需的类型的定义。
•*Impl*.*:
ActiveX控件实现文件,定义并实现控件。
以ActiveTemplateLibrary(ATL)的VCLCONTROL_IMPL宏为基础.
•*_ATL.cpp(.h):
一个ATLunit,前面省略的是工程名,包含了对所需类的引用和声明.
•AnAboutboxformandunitifyourequestedthem.
•A.LICfileifyouenabledlicensing.
步骤2:
创建组件
使用COM对象向导
步骤2.1:
选择File|New|Other打开“NewItems”对话框,选中”ActiveX”属性页.
步骤2.2:
双击ComObject图标或选中后单击”OK”按钮
步骤2.3:
设置弹出的”NewCOMObject”对话框,设置内容如下:
•CoClassname:
组件对象名.
•ImplementedInterface:
实现的接口,缺省名字为:
“I”+组件对象名,也可以单击List在弹出的对话框中选择所需接口,显示为所选接口名。
•ThreadingModel:
组件的线程模型,一般选默认值即可。
•Eventsupport:
表示是否自动生成部分组件支持事件的代码。
•Oleautomation:
表示生成组件是否与自动化对象兼容,选中可自动生成部分代码,自定义接口时有效。
•ImplementAncestorInterfaces:
选中要实现接口时有效,选中后可自动生成接口的实现。
但不生成IUnknown,IDispatch和IAppServer的实现.
步骤2.4:
设置完后,单击OK,弹出如下对话框。
使用自动化对象向导
选择File|New|Other打开“NewItems”对话框,选中”ActiveX”属性页.显示同COM对象。
步骤2.2:
双击AutomationObject图标或选中后单击”OK”按钮,弹出如下对话框。
设置CoClassname、ThreadingModel、Eventsupport,其含义同COM对象。
步骤3:
设置组件选项
单击“Project|Option”,选中Option,设置ATL,可选默认设置,各项含义如下:
Instancing:
确定COM对象的实例数,对进程内组件服务无效。
-SingleUse:
客户实例化对象后,COM将其从视图中删除,其它客户可以创建他们自身的对象实例。
-Multipleuse:
每个客户可以创建自己的实例,且都在同一进程空间。
OLEInitializationCOINIT_XXXflag:
确定COM怎么初始化
-apartment-threaded:
对象在创建的线程中调用
-multithreaded:
对象可以在多个线程调用
Debuggingflags:
设置调试方式.
步骤4:
定义组件
步骤4.1:
在弹出的类型库编辑器中,在左侧窗口中,单击鼠标右键,在弹出的菜单中,单击New.
步骤4.2:
选中需要增加的项,单击鼠标或直接按红色方框圈中的按钮。
添加方法:
步骤4.2.1:
在new弹出的菜单中,选中Method,则在左侧窗口中增加”Method1”,可更改名字.
步骤4.2.2:
可在方法名中或者在“Attributes”属性页下Name文本框内,输入新的名字,在“Parameters”属性页下,输入属性参数。
步骤4.2.3:
单击刷新按钮,生成方法的框架代码。
步骤4.2.4:
在图中蓝色区域所在的括号内属于方法的相关代码。
添加属性:
在new弹出的菜单中,选中Progerty,则在左侧窗口中增加两个”Progerty1”,分别表示属性的读和写.
可在属性名中或者在“Attributes”属性页下Name文本框内,输入新的名字.
CustomizingtheActiveXcontrol’sinterface
TheActiveXControlandActiveFormwizardsgenerateadefaultinterfaceforthe
ActiveXwrapperclass.Thisdefaultinterfacesimplyexposestheproperties,
methods,andeventsoftheoriginalVCLcontrolorform,withthefollowing
exceptions:
•Data-awarepropertiesdonotappear.BecauseActiveXcontrolshaveadifferent
mechanismformakingcontrolsdata-awarethanVCLcontrols,thewizardsdonot
convertpropertiesrelatedtodata.See“Enablingsimpledatabindingwiththe
typelibrary”onpage43-11forinformationonhowtomakeyourActiveXcontrol
data-aware.
•Anyproperty,method,oreventthattypethatisnotAutomation-compatibledoes
notappear.YoumaywanttoaddthesetotheActiveXcontrol’sinterfaceafterthe
wizardhasfinished.
Youcanadd,edit,andremovetheproperties,methods,andeventsinanActiveX
controlbyeditingthetypelibraryusingtheTypeLibraryeditorasdescribedin
Chapter39,“Workingwithtypelibraries.”
NoteYoucanaddunpublishedpropertiestoyourActiveXcontrol’sinterface.Such
propertiescanbesetatruntimeandwillappearinadevelopmentenvironment,but
changesmadetothemwillnotpersist.Thatis,whentheuserofthecontrolchanges
thevalueofapropertyatdesigntime,thechangesarenotreflectedwhenthecontrol
isrun.ThisisbecauseActiveXcontrolsusetheVCLstreamingsystemratherthanthe
ATLstreamingsystem.IfthesourceisaVCLobjectandthepropertyisnotalready
published,youcanmakepropertiespersistentbycreatingadescendantoftheVCL
objectandpublishingthepropertyinthedescendant.
YoumayalsochoosenottoexposealloftheVCLcontrol’sproperties,methods,and
eventstohostapplications.YoucanusetheTypeLibraryeditortoremovethesefrom
theinterfacesthatthewizardgenerated.Whenyouremovepropertiesandmethods
fromaninterfaceusingtheTypeLibraryeditor,theTypeLibraryeditordoesnot
removethemfromthecorrespondingimplementationclass.EdittheActiveX
wrapperclassintheimplementationunittoremovetheseafteryouhavechangedthe
interfaceintheTypeLibraryeditor.
WarningAnychangesyoumaketothetypelibrarywillbelostifyouregeneratetheActiveX
controlfromtheoriginalVCLcontrolorform.
TipItisagoodideatocheckthemethodsthatthewizardaddstoyourActiveXwrapper
class.Notonlydoesthisgiveyouachancetonotewherethewizardomittedany
data-awarepropertiesormethodsthatwerenotAutomation-compatible,italsolets
youdetectmethodsforwhichthewizardcouldnotgenerateanimplementation.
Suchmethodsappearwithacommentintheimplementationthatindicatesthe
problem.
CreatinganActiveXcontrol43-9
CustomizingtheActiveXcontrol’sinterface
Addingadditionalproperties,methods,andevents
AddingpropertiesandmethodstoyourActiveXcontrol’sinterfaceworksthesame
wayasaddingproperties,methods,andeventstoanyCOMinterface.Addingevents
isthesameasaddingmethods(eventhandlers),exceptthatyouaddthemtothe
Eventsinterfaceratherthantheobject’sdefaultinterface.Usingthetypelibraryto
addpropertiesandeventsisdescribedin“DefiningaCOMobject’sinterface”on
page41-9.
WhenyouaddtoanActiveXcontrol’sinterface,youareoftenjustsurfacinga
property,method,oreventintheunderlyingVCLcontrol.Thefollowingtopics
describehowtodothis.
Addingpropertiesandmethods
TheActiveXwrapperclassimplementspropertiesinitsinterfaceusingreadand
writeaccessmethods.Thatis,thewrapperclasshasCOMproperties,whichappear
onaninterfaceasgetterand/orsettermethods.UnlikeVCLproperties,youdonot
seea“property”declarationontheinterfaceforCOMproperties.Rather,yousee
methodsthatareflaggedaspropertyaccessmethods.Whenyouaddapropertyto
theActiveXcontrol’sdefaultinterface,thewrapperclassdefinition(whichappearsin
the_TLBunitthatisupdatedbytheTypeLibraryeditor)gainsoneortwonew
methods(agetterand/orsetter)thatyoumustimplement,justaswhenyouadda
methodtotheinterface,thewrapperclassgainsacorrespondingmethodforyouto
implement.Thus,addingpropertiestothewrapperclass’sinterfaceisessentiallythe
sameasaddingmethods:
thewrapperclassdefinitiongainsnewskeletalmethod
implementationsforyoutocomplete.
NoteFordetailsonwhatappearsinthegenerated_TLBunit,see“Codegeneratedwhen
youimporttypelibraryinformation”onpage40-5.
Forexample,consideraCaptionproperty,oftypeAnsiStringintheunderlyingVCL
object.WhenyouaddthispropertyintheTypeLibraryeditor,C++Builderaddsthe
followingdeclarationstothewrapperclass:
STDMETHOD(get_Caption(BSTR*Value));
STDMETHOD(set_Caption(BSTRValue));
Inaddition,itaddsskeletalmethodimplementationsforyoutocomplete:
STDMETHODIMPTButtonXImpl:
:
get_Caption(BSTR*Value)
{
try
}
catch(Exception&
e)
returnError(e.Message.c_str(),IID_IButtonX);
returnS_OK;
};
43-10Developer’sGuide
set_Caption(BSTRValue)
Typically,youcanimplementthesemethodsbysimplydelegatingtotheassociated
VCLcontrol,whichcanbeaccessedusingthem_VclCtlmemberofthewrapperclass:
*Value=WideString(m_VclCtl->
Caption).Copy();
m_VclCtl->
Caption=AnsiString(Value);
Insomecases,youmayneedtoaddcodetoconverttheCOMdatatypestonative
C++types.Theprecedingexamplemanagesthiswithtypecasting.
Addingevents
TheActiveXcontrolcanfireeventstoitscontainerinthesamewaythatan
automationobjectfireseventstoclients.Thismechanismisdescribedin“Exposing
eventstoclients”onpage41-10.
IftheVCLcontrolyouareusingasthebasisofyourActiveXcontrolhasany
publishedevents,thewizardsautomaticallyaddthenecessarysupportformanaging
alistofclienteventsinkstoyourActiveXwrapperclassanddefinetheoutgoing
dispinterfacethatclientsmustimplementtorespondtoevents.
CreatinganActiveXcontrol43-11
Inordertofireeventstothecontainer,yourActiveXwrapperclassmustimplement
aneventhandlerfortheeventontheVCLobject.Thiseventhandlercallsthe
Fire_EventNamemethodthatisimplementedbytheTEvents_CoClassNameclass
definedinthe_TLBunit:
void__fastcallTButtonXImpl:
KeyPressEvent(TObject*Sender,char&
Key)
shortTempKey;
TempKey=(short)Key;
Fire_OnKeyPress(&
TempKey);
Key=(short)TempKey;
YoumustthenassignthiseventhandlertotheVCLcontrolsothatitiscalledwhen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 组件 技术 实验