开发入门Word文档下载推荐.docx
- 文档编号:19431217
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:338
- 大小:1.37MB
开发入门Word文档下载推荐.docx
《开发入门Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《开发入门Word文档下载推荐.docx(338页珍藏版)》请在冰豆网上搜索。
在VBA编辑器中写好VBA代码后,有两种方式运行:
第一,点击VBA编辑器工具条中的(运行)按钮,可立即运行写好的代码;
第二,退出VBA编辑器,重新启动Macro对话框,如图2,选择要运行的VBA宏名称,点击<
Run>
按钮即可运行相应的VBA宏。
方法二:
创建UIControl(交互式VBA编程)
1、用鼠标右击任何工具栏(条),在弹出的上托式菜单中选择<
Customize>
菜单项,如图4,进入图5所示的Customize对话框。
图4启动“Customize”对话框
2、切换到“Customize”对话框的“Commands”页,选中“UIControls”后点击<
NewUIControl>
按钮,进入图6所示的“NewUIControl”对话框。
3、在“NewUIControl”对话框中,用户可根据需要选择UIControl类型:
UIButtonControl:
创建Button;
UIToolControl:
创建与Map交互的Tool;
UIEditBoxControl:
创建EditBox;
UIComboBoxControl:
创建ComboBox。
最后点击<
按钮只创建UIControl或者点击<
CreateandEdit>
按钮创建UIControl并进入VBA编辑器。
与方法一不同,此时应在UIControl的事件中进行VBA编程。
图5Customize对话框
图6NewUIControl对话框
4、UIControl创建后,在图5所示的“Customize”对话框选中UIControl并将其拖置到任意工具条上,用户便可象使用系统已有的Control一样使用所创建的UIControl。
1.1.2.如何在VB环境中利用ArcObjects组件开发ActiveXDLL
1.1.1节讨论了如何在ArcGis的VBA环境中编程,虽然通过这种方式可以完成大多数用户的定制需求,但是,在某些情况下,对于特殊的应用,用户需要脱离ArcGIS环境而在VB开发环境中开发外部独立的应用程序,这种外部独立的应用程序有两种形式:
ActiveXDLL和StandardEXE。
StandardEXE的开发将在1.1.4中讨论,本节将讨论ActiveXDLL的开发,其关键是引用ArcObjects对象库和实现ArcObjects接口(例如ICommand,ITool,IToolBar等)。
下面介绍在VB环境利用ArcObjects组件开发ActiveXDLL的一般步骤。
1、启动VB开发环境,在图7所示的“NewProject”对话框中选择“ActiveXDLL”项,并点击<
打开>
按钮,进入VBE环境。
图7NewProject对话框
2、引用ArcObjects对象库:
首先点击<
Project>
菜单中的<
References>
项,如图8,进入对象库引用对话框,如图9。
图8启动对象库引用对话框
图9对象库引用对话框
3、对象库引用对话框(图9)中选中“EsriArcMapObjectLibrary”和“EsriObjectLibrary”两项,并点击<
OK>
按钮,返回VBE环境。
4、一般在类模块中写入实现特定ArcObjects接口的代码,如图10,然后运行<
File>
Makeproject1.dll>
项,生成DLL文件,如图11。
(project1.dll随项目名改变)。
图10类模块编辑窗口
图11生成DLL文件
1.1.3.如何在ArcMap中加载利用ArcObjects组件开发的ActiveXDLL
用户通过1.1.2中介绍的方法开发好一个ActiveXDLL程序后,便可根据实际需要,在ArcMap环境下加载这个ActiveXDLL程序。
其一般步骤如下:
1、用鼠标右击任何工具栏(条),点击弹出的上托式菜单中的<
菜单项(参见图4)。
2、在Customize对话框中,根据被加载DLL的类型切换到“Toolbars”或者“Commands”页(参见图5),然后点击<
AddFromFile>
按钮。
3、在“打开文件”对话框中(Windows通用“打开文件”对话框,图略),选择被加载的Dll文件,并点击<
4、如果加载是“Commands”,则在图5所示的对话框中显示加载的Command,并可以将其拖置于任何工具条上;
如果加载是“ToolBars”,则在图12所示的对话框中显示加载的ToolBar,选中后即可在ArcMap中显示。
图12加载ToolBar
1.1.4.如何在VB环境中利用ArcObjects控件开发EXE
利用ArcObjects控件开发EXE的前三步类似于1.1.2中开发“AcrtiveDll”的前三步,唯一不同的是在“NewProject”对话框中选择“StandardEXE”。
4、点击<
菜单项中的<
Components>
项,打开“Components”对话框,如图13。
图13打开Components对话框
5、在“Components”对话框中,切换到Controls页,并选中“ESRIMapControl”项,点击<
应用>
或<
确定>
按钮,如图14。
图14Components对话框
6、如图15所示,加载MapControl控件之后,在VBE的控件面板中出现了MapControl控件图标,用户便可以象在Form中添加Button一样在Form中添加MapControl控件,并利用它开发EXE。
图15添加MapControl控件
1.2.用户界面
1.2.1.如何创建定制的按钮(Button)
本例要实现的是如何创建定制的按钮(Button)。
●要点
用户通过在类模块中实现ICommand接口来创建定制的按钮(COMcommand)。
ICommand接口包括caption、name、category、bitmap、message(StatusBarr的提示信息)、tooltip(微帮助)、helpcontextid、helpfile、enabled以及checked等十个属性和OnCreate、 OnClick两个事件。
从Icommand接口的OnCreate事件中获取的ArcMap的Application实例必须用一个公共变量保存,以便在其它事件中(或者其它接口的事件中甚至整个工程中)使用。
·
OnCreate事件的参数hook传入的是一个Object,也就是ArcMAP的Application实例,可把它赋给一个IApplication接口的变量,便获得了ArcMAP的实例。
在OnClick事件中写入相关代码,表示按下按钮时要实现的功能.
●程序说明
程序在类模块中实现Icommand接口来创建自己的按钮(Button)
●代码
OptionExplicit
'
实现Icommand接口
ImplementsICommand
Dimm_pPictureasPicture
Dimm_pApplicationAsIApplication
PrivateSubClass_Initialize()
调入.RES文件中ID为101的BitMap作为该按钮的显示图片
Setm_pPicture=LoadResPicture(101,vbResBitmap)
EndSub
PrivatePropertyGetICommand_Bitmap()AsesriCore.OLE_HANDLE
ICommand_Bitmap=m_pPicture
EndProperty
PrivatePropertyGetICommand_Caption()AsString
ICommand_Caption="
CreateButton"
PrivatePropertyGetICommand_Category()AsString
ICommand_Category="
CreateButton"
PrivatePropertyGetICommand_Checked()AsBoolean
PrivatePropertyGetICommand_Enabled()AsBoolean
ICommand_Enabled=True
PrivatePropertyGetICommand_HelpContextID()AsLong
PrivatePropertyGetICommand_HelpFile()AsString
PrivatePropertyGetICommand_Message()AsString
PrivatePropertyGetICommand_Name()AsString
ICommand_Name="
CreateButton"
PrivateSubICommand_OnClick()
加入按下按钮时实现的功能代码。
在这里,
按钮按下时显示ArcMap的Document的Tittle
DimpDocumentAsIDocument
SetpDocument=m_pApplication.Document
MsgBoxpDocument.Title
PrivateSubICommand_OnCreate(ByValhookAsObject)
获取ArcMap的Application实例
Setm_pApplication=hook
PrivatePropertyGetICommand_Tooltip()AsString
ICommand_Tooltip="
1.2.2.如何创建定制的Tool
本例要实现的是如何创建定制的Tool
用户在类模块中实现Icommand(参见1.2.1)和ITool接口。
ITool接口包括mousemove,mousebuttonpress/release,keyboardkeypress/release,double-click以及rightclick等事件、Cursor属性和Refresh方法。
Tool既具有Button的功能,又具有与ArcMAP界面交互的功能,Button的功能代码必须写在Icommand的OnClick事件中,而所有实现交互功能的代码必须写在Itool接口的各个事件中。
Itool接口的各个事件,用户可以在其中写入相关代码,表示用户与ArcMAP界面交互时一旦触发某事件要实现的功能。
程序在类模块中实现Icommand和Itool接口来创建自己的Tool.
实现Icommand和Itool接口
ImplementsITool
Dimm_pApplicationAsIApplication
Dimm_pBitmapAsIPictureDisp
Dimm_pCursorAsIpictureDisp
Setm_pBitmap=LoadResPicture(101,0)
'
从.RES文件中调入ID为102的图片作为按下Tool后的MouseCursor
Setm_pCursor=LoadResPicture(102,2)
ICommand_Bitmap=m_pBitmap
ICommand_Caption="
MyTool"
ICommand_Category="
MyCustomTools"
ICommand_Enabled=True
ICommand_Message="
Thisismycustomtool"
MyCustomTool_MyTool"
加入按下按钮时实现的功能代码
MsgBox"
Clickedonmycommand"
获取ArcMAP的Application实例
Setm_pApplication=hook
ICommand_Tooltip="
PrivatePropertyGetITool_Cursor()AsesriCore.OLE_HANDLE
ITool_Cursor=m_pCursor
PrivateFunctionITool_Deactivate()AsBoolean
如果ITool_Deactivate设为False,则Tool不可用
ITool_Deactivate=True
EndFunction
PrivateFunctionITool_OnContextMenu(ByValXAsLong,ByValYAsLong)AsBoolean
在这里可以加入用户代码,点击Mouse右键时显示一个定制的contextmenu
PrivateSubITool_OnDblClick()
在这里加入Mouse双击时的功能代码
PrivateSubITool_OnKeyDown(ByValkeyCodeAsLong,ByValShiftAsLong)
PrivateSubITool_OnKeyUp(ByValkeyCodeAsLong,ByValShiftAsLong)
PrivateSubITool_OnMouseDown(ByValButtonAsLong,ByValShiftAsLong,_
ByValXAsLong,ByValYAsLong)
加入Mouse单击时的功能代码
IfButton=1Then
DimpPointAsIPoint
DimpMxApplicationAsIMxApplication
SetpMxApplication=m_pApp
SetpPoint=pMxApplication.Display.DisplayTransformation.ToMapPoint(X,Y)
m_pApplication.StatusBar.Message(0)=Str(pPoint.X)&
"
"
&
Str(pPoint.Y)
EndIf
PrivateSubITool_OnMouseMove(ByValButtonAsLong,ByValShiftAsLong,_
加入Mouse移动时的功能代码
m_pApplication.StatusBar.Message(0)="
ITool_OnMouseMove"
PrivateSubITool_OnMouseUp(ByValButtonAsLong,ByValShiftAsLong,_
加入释放Mouse时的功能代码
ITool_OnMouseUp"
PrivateSubITool_Refresh(ByValhDCAsesriCore.OLE_HANDLE)
1.2.3.如何创建定制的工具条(ToolBar)
本例要实现的是如何创建定制的工具条(ToolBar)。
就必须在类模块中实现IToolBarDef接口。
IToolBarDef接口包括Caption、ItemCount及Name三个属性和GetItemInfo方法。
通过在类模块中实现IToolBarDef接口。
ItemCount属性表示ToolBar显示的条目(Button、Tool或其它控件)数。
GetItemInfo方法定义工具条上各条目的CLSID,其中,参数pos表示条目在ToolBar中的位置,itemDef是定义相应位置的条目的IItemDef对象。
工具条条目的CLSID分为两种:
1、系统CLSID,代表ArcGIS的一个功能,其引用方式为"
esriCore.命令名称"
,如"
esriCore.AddDataCommand"
、"
esriCore.FileSaveCommand"
等。
2、用户定制CLSID,表示用户自己定义的功能。
其引用方式为"
工程名称.定制功能类名称"
ToolBarDef.ClsBar"
。
必须注意,这里“定制功能类名称”是工程中实现的一个功能类名称,“工程名称”即为当前工程的名称(不是DLL文件名,也不是工具条的名称),每次新建一个工程时,系统默认的工程名在某些情况下无法使用(在中文版的VB中是一个乱字符),必须改名后方能用。
程序在类模块中实现IToolBarDef接口来创建自己的工具条(ToolBar)。
ImplementsIToolBarDef
PrivatePropertyGetIToolBarDef_Caption()AsString
IToolBarDef_Caption="
CustomToolBar"
PrivateSubIToolBarDef_GetItemInfo(ByValposAsLong,ByValitemDefAs_
esriCore.IItemDef)
这里假设在当前工程(工程名称为ToolBarDef)中定义了一个类模块(名为ClsBar),
它实现了Icommand接口(可参照1.2.1)
SelectCasepos
Case0
用户自定义条目
itemDef.ID="
ToolBarDef.ClsBar"
itemDef.Group=False
Case1
系统条目
EndSelect
PrivatePropertyGetIToolBarDef_ItemCount()AsLong
IToolBarDef_ItemCount=2
PrivatePropertyGetIToolBarDef_Name()AsString
IToolBarDef_Name="
1.2.4.如何创建定制的MultiItem
本例要实现的是如何创建定制的MultiItem。
需要实现IMultiItem接口,但不需要同时实现Icommand接口。
IMultiItem接口包括Caption,itemCaption,ItemBitmap,ItemEnabled,ItemC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 开发 入门