版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ArcObjects的开发的开发 1-2 AO是什么?是什么? AOAO(ArcObjectsArcObjects的缩写)是的缩写)是ESRIESRI公司公司ArcGISArcGIS 家族中应用程家族中应用程 序序ArcMapArcMap, ArcCatalog, ArcCatalog 和和 ArcSceneArcScene的开发平台。的开发平台。 是基于是基于MicrosoftMicrosoft COM COM技术所构建的一系列技术所构建的一系列COMCOM组件集。组件集。 开发人员可以在开发人员可以在AOAO组件对象的基础上开发出更加强大灵活的应组件对象的基础上开发出更加强大灵活的应 用系
2、统。用系统。 1-3 AO开发的一般步骤开发的一般步骤 u1 1用用AOAO术语对问题进行描述和定义,合理地将大任务合理划分为一些子术语对问题进行描述和定义,合理地将大任务合理划分为一些子 任务;任务; u2 2理解理解AOAO的层次组织关系,标识和明确各子任务的关键字;的层次组织关系,标识和明确各子任务的关键字; u3 3决定在什么地方来编写代码,是决定在什么地方来编写代码,是VBAVBA呢,还是呢,还是VBVB或其它工具;或其它工具; u4 4根据标识的关键字在根据标识的关键字在AO Developer helpAO Developer help和其它开发资源中搜索有没有和其它开发资源中搜
3、索有没有 相关示例代码。相关示例代码。 u5 5打开正确的对象模型图(打开正确的对象模型图(OMDOMD),),寻找所需要的类、接口。寻找所需要的类、接口。 u6 6在在AO Component HelpAO Component Help中浏览有关接口的详细说明及相关文档;中浏览有关接口的详细说明及相关文档; u7 7在开发环境中使用确定的接口及其方法属性等,完成代码实现。在开发环境中使用确定的接口及其方法属性等,完成代码实现。 1-4 AO开发的方式比较开发的方式比较 The VBA development environment(I) 1-6 概概 述述 uVBA开发环境开发环境 u使用客
4、户化对话框进行以下操作使用客户化对话框进行以下操作 u创建新的工具条和命令按钮创建新的工具条和命令按钮 u增加,删除,移动命令按钮增加,删除,移动命令按钮 u设置按钮属性设置按钮属性 u存储和发布客户化结果存储和发布客户化结果 uVisual Basic Editor u代码的保存代码的保存 u模块模块 u程序程序 uVisual Basic 声明声明 1-7 VBA 开发环境开发环境 u与所有使用与所有使用VBA应用程序类似的环境应用程序类似的环境 u自定义对话框自定义对话框: 客户界面自定义客户界面自定义 uVisual Basic Editor: 代码书写代码书写 Customize d
5、ialog box Visual Basic Editor 1-8 ArcGIS 命令按钮命令按钮 u工具条和菜单都包含命令工具条和菜单都包含命令 u命令可以是按钮命令可以是按钮, 菜单菜单, 宏宏, 和和 UIControls u每个命令都连接了代码每个命令都连接了代码 Toolbar Commands 1-9 使用客户自定义对话框使用客户自定义对话框 u打开客户化对话框,使界面进入设置模式打开客户化对话框,使界面进入设置模式 u在客户化对话框打开的状态,你可以在客户化对话框打开的状态,你可以 u重新排列或移除现有的命令条目重新排列或移除现有的命令条目 u增加新的工具条和命令增加新的工具条和
6、命令 u改变命令属性改变命令属性 1-10 uOptions:管理客户化的口令等等管理客户化的口令等等. u客户化对话框的三个页面:客户化对话框的三个页面: u工具条工具条: 工具条的开关工具条的开关, 创建新的工具条创建新的工具条 自定义对话框自定义对话框 u命令命令: 拖拽新的命令到拖拽新的命令到ArcMap界面界面 A 1-11 自定义对话框自定义对话框 u所有的命令按分类组织所有的命令按分类组织 u所有所有ArcMap or ArcCatalog 命令都显示在这里命令都显示在这里 u有一些没有被放到缺省的界面上有一些没有被放到缺省的界面上 u拖拽命令到菜单或工具条上拖拽命令到菜单或工具
7、条上 Command Categories Commands 1-12 创建一个新的命令创建一个新的命令 u在在UIControls 分类中分类中 u选择选择User-created commands u有四种类型有四种类型 u按钮按钮 u工具工具 u编辑框编辑框 u组合框组合框 1-13 设置控件属性设置控件属性 u自定义对话框必须打开自定义对话框必须打开 u右击一个控件浏览或改变其属性右击一个控件浏览或改变其属性 u可定义的属性包括可定义的属性包括 u名称名称 u图标图标 u显示文本或者图像显示文本或者图像 u建立工具组建立工具组 1-14 访问自定义命令访问自定义命令 uArcMap 有
8、三种存储级别有三种存储级别 u在启动的时候模板将按顺序的加载在启动的时候模板将按顺序的加载 uArcCatalog 只使用只使用Normal模板模板 This Document(*.mxd) Base Template(*.mxt) Normal Template 影响所有使用该模板的文档影响所有使用该模板的文档 影响当前文档影响当前文档 影响所有的文档影响所有的文档 1-15 保存用户定制结果保存用户定制结果 u 所有定制结果被保存在:所有定制结果被保存在: uNormal template, Base template, or the current document u当前地图将越过其它
9、的模板当前地图将越过其它的模板 u比如比如, 能够添加或者删除控件能够添加或者删除控件 Save in: Normal.mxt 1-16 查看控件的源代码查看控件的源代码 u命令拥有各种事件命令拥有各种事件 (e.g., Click, Double-click, MouseUp, KeyDown, KeyUp) u当事件触发的时候,相应的代码将被运行当事件触发的时候,相应的代码将被运行 1-17 示范示范 u使用自定义对话框可以使用自定义对话框可以 u创建一个新的工具条创建一个新的工具条 u添加一个已经存在的命令到添加一个已经存在的命令到ArcMap界面界面 u重排界面命令顺序重排界面命令顺序
10、 u生成一个新的生成一个新的 UIControl u改变命令按钮属性改变命令按钮属性 u重新设置工具条到初始状态重新设置工具条到初始状态 1-18 The Visual Basic Editor Code Modules Procedures Project Explorer Projects 1-19 Project Explorer: Organizes projects (levels of customization) Project: Folder that stores modules (e.g., Normal.mxt) Module: Document that stores
11、code Procedure: A block of code (e.g., macros) Statement: A line of code 理解理解ArcMap 软件代码的存储软件代码的存储 Module Procedure Statements 1-20 书写书写Visual Basic 代码代码 u要完成的任务要完成的任务 u在程序段内书写在程序段内书写 u示例程序代码示例程序代码 Private Sub ShowMsgBox() Beep MsgBox ESRI End Sub 1-21 uInputBox 用来获得输入信息用来获得输入信息 uMsgBox 输出一条信息输出一条信息
12、 u连接字符串用连接字符串用 & u获得日期或时间获得日期或时间 常用的常用的 Visual Basic 函数函数 MsgBox ArcMap is Great! MsgBox The date is & Date MsgBox The time is & Time MsgBox The date and time is & Now InputBox Enter the new Landuse Code: 1-22 过程的类型过程的类型 u事件过程事件过程Event procedures u有一个相关联的对象有一个相关联的对象 (e.g., control) u当相应的事件发生时运行代码当相应
13、的事件发生时运行代码 (e.g., click) u子程序(子程序(SUB)和函数(和函数( Functions )过程)过程 u没有相关联的对象没有相关联的对象 u必须被调用才能运行必须被调用才能运行 u函数返回一个值函数返回一个值 1-23 运行一个事件过程运行一个事件过程 u控件(控件(Controls)有预先定义的一组事件有预先定义的一组事件 u你可以选择相应的事件去添加代码你可以选择相应的事件去添加代码 u当一个事件被激发,相关的代码将被运行当一个事件被激发,相关的代码将被运行 1-24 u在对象框中选择一个控件在对象框中选择一个控件 对象框对象框 程序框程序框 u在事件框中选择相应
14、的事件在事件框中选择相应的事件 自动添加事件过自动添加事件过 程的封装行程的封装行 在模块中浏览事件过程在模块中浏览事件过程 A MsgBox Hi! 当点击当点击 UIButtonControl1时,写入的代码将运行时,写入的代码将运行 1-25 ThisDocument 模块模块 u与一个文档相关的代码可以包含在:与一个文档相关的代码可以包含在: uNormal template uCurrent map document (mxd) uBase template (optional) u可以在任何一个层次中客户化可以在任何一个层次中客户化 1-26 创建一个新的模块创建一个新的模块 u标
15、准模块标准模块: 包含常量、子程序、功能过程等包含常量、子程序、功能过程等 u类模块类模块: 包含一个类的定义包含一个类的定义 u用户窗体用户窗体: 包含代码、窗体的布局等包含代码、窗体的布局等 1-27 Creating a new sub or function procedure (macro) uScope: 公共公共 or 私有私有 uSub or Function: 函数会返回一个值函数会返回一个值 uParameters: 列出了所有需要的输入列出了所有需要的输入 uReturn Type: 返回数据的类型返回数据的类型 (functions only) Return Type
16、Name Parameter List Scope 1-28 定义程序作用范围定义程序作用范围 uPublic:可以在任何模块中调用该过程可以在任何模块中调用该过程 uPrivate: 只能被同一个模块中其它过程调用只能被同一个模块中其它过程调用 1-29 运行一个运行一个sub()() or function()() 程序程序 u没有事件去激活这些过程的运行没有事件去激活这些过程的运行 u必须调用这些过程必须调用这些过程 u通过宏菜单运行:从界面进行调用通过宏菜单运行:从界面进行调用 u调用过程的申明调用过程的申明: 从代码中进行调用从代码中进行调用 1-30 添加一个宏命令到工具条添加一个
17、宏命令到工具条 u点击自定义对话框中的点击自定义对话框中的Macros u宏命令转化为一个工具条按钮宏命令转化为一个工具条按钮 u编辑控件属性编辑控件属性 1-31 获得帮助获得帮助 uF1 键获得上下文敏感帮助键获得上下文敏感帮助 uVisual Basic 帮助主题帮助主题 uArcObjects Developer Help uESRI Web site 1-32 练练 习:习: u熟悉熟悉 the Visual Basic Editor u操作事件程序操作事件程序 u添加新的代码模块添加新的代码模块 u运行程序运行程序 u导出代码到磁盘文件导出代码到磁盘文件 Visual Basic
18、code: How, where, and when?(II) 1-34 在在VBA中怎么编写代码中怎么编写代码 uHow? u面向对象的程序设计面向对象的程序设计 uVisual Basic 语法语法 uApplication and ThisDocument 变量变量 uWhere? u创建窗体和控件创建窗体和控件 uWhen? u文档文档, 控件控件, and 窗体事件窗体事件 1-35 面向对象的程序设计面向对象的程序设计 u对象是对象是 uVisual Basic: 窗体窗体, 文本框文本框, 命令按钮命令按钮, uArcObjects: 地图地图, 图层图层, 符号符号, 表表 u
19、操作对象操作对象 u属性属性: 对象的属性对象的属性 u方法方法: 对像知道如何去做的事情对像知道如何去做的事情 u事件事件: 对象能够相应的一些动作对象能够相应的一些动作 1-36 MapCar Property 地图背景地图背景马力马力 Method 添加图层添加图层加速加速 Event 选择集改变选择集改变踩刹车踩刹车 例子例子: 面向对象的术语面向对象的术语 1-37 How: Visual Basic 语法语法 u获取属性值获取属性值 Object.Property u属性赋值属性赋值 Object.Property = value u调用方法:调用方法: Object.Method
20、 arg1, ., argN MsgBox The map name is & myMap.Name myMap.Name = Zaire.mxd myMap.AddLayer CityLayer myMap.SelectFeature CityLayer, KahembaPoint myMap.ClearSelection 1-38 预设预设 ArcObjects 变量变量 u在在VBA环境下的环境下的ArcObjects变量的全局变量变量的全局变量 uApplication uThisDocument u作为编程的一个起始点作为编程的一个起始点 MsgBox You are current
21、ly working in & Application.Name MsgBox The current map is & ThisDocument.Title Object Property 1-39 u列出可用的属性和方法列出可用的属性和方法 u当一个对象名被输入的时候自动显示当一个对象名被输入的时候自动显示 u如果没有显示出自动完成的列表,则表示该对象没有被认证如果没有显示出自动完成的列表,则表示该对象没有被认证 u使用使用 Tab, Enter, or Space 去选择所需的属性和方法去选择所需的属性和方法 VBA的自动代码完成功能的自动代码完成功能 Press Tab, Enter,
22、 or Space 1-40 Where: 控件控件, 文档文档, and 窗体窗体 u生成生成 UIControls u用地图文档存储用地图文档存储Macros u创建用户交互窗体(创建用户交互窗体(Form) u构建比构建比message boxes and input boxes更复杂的用户界面更复杂的用户界面 1-41 使用窗体使用窗体 uForm = 控件窗口控件窗口 + 相关代码相关代码 Form Designer Properties window Toolbox Code module 1-42 在设计模式下输入属性值在设计模式下输入属性值 u选择一个控件选择一个控件 u通过属
23、性窗口浏览和改变属性值通过属性窗口浏览和改变属性值 u外观外观: Caption, Font, BackColor u行为行为: TabIndex, Locked, Enabled u名称名称 1-43 为一个窗体书写代码为一个窗体书写代码 uUserForms 由一个设计器和一个代码模块组成由一个设计器和一个代码模块组成 u双击一个双击一个 control 去展开它的代码去展开它的代码 u在窗体上的每一个控件都有几个事件过程在窗体上的每一个控件都有几个事件过程 Code Module Form Designer 1-44 在运行时修改控件属性在运行时修改控件属性 u在窗体运行时使用代码来获取
24、和设置属性在窗体运行时使用代码来获取和设置属性 u语法语法: Object.Property u控件就是对象控件就是对象 Private Sub cmdApply_Click() strFTemp = ( txtCelsius.Text * 9 / 5 ) + 32 lblFahrenheit.Caption = Fahrenheit: & strFTemp End Sub 1-45 When: 窗体和控件事件窗体和控件事件 u事件触发则代码运行事件触发则代码运行 u不同的控件有不同的事件集不同的控件有不同的事件集 u窗体事件窗体事件 1-46 When: 地图文档事件地图文档事件 u在在Th
25、isDocument 模块内可用模块内可用 u Normal, base template, or current map (.mxd) uMxDocument 对象的事件对象的事件 uOpen, close, new, change, etc. Object List Procedure List 1-47 保存你的工作保存你的工作 u利用文档来保存模块利用文档来保存模块 uArcCatalog normal template uArcMap normal template uArcMap template (*.mxt) uMap document (*.mxd) u导出模块导出模块 uF
26、orm file (*.frm): designer and code uStandard and class modules uCan be imported into other projects 1-48 练习:练习: u创建一个窗体创建一个窗体 u设置初始控件属性设置初始控件属性 u测试和调试窗体测试和调试窗体 u采用预设变量采用预设变量 uApplication uThisDocument u保存工作保存工作 使用变量(使用变量(III) 1-50 在在VBA中使用变量中使用变量 u变量定义变量定义 u使用变量使用变量: 声明声明, 赋值赋值, 比较比较 u过程的参数传值和返回值过程
27、的参数传值和返回值 u比较两个变量的值比较两个变量的值 u分支分支: 判断语句判断语句 u变量的作用域变量的作用域 1-51 变量变量 u分配一个内存地址存储变量分配一个内存地址存储变量 u数据类型数据类型 (integer, date, string, etc.) u可以改变存储值可以改变存储值 the VB version of: a + b = c, is dblCSquare = (dblA * dblA) + (dblB * dblB) 转换温度的计算转换温度的计算 intTempCelsius = InputBox (Enter temperature (C): ) intTemp
28、Fahrenheit = (intTempCelsius * 1.8) + 32 1-52 使用变量使用变量 u声明声明: Create a variable u设置设置: Store a value u使用使用: Get the value MsgBox myDog myDog = Sparky Dim myDog As String myDog Sparky myDog Sparky myDog Sparky A 1-53 声明变量声明变量 Dim (dimension) statement u声明一个变量声明一个变量 u指定变量的类型指定变量的类型 Declare variables D
29、im strFilePathName As String Dim datSparkysBirthday As Date Dim intCount As Integer Other ways to declare variables (to be discussed later). Private strFilePathName As String Public datSparkysBirthday As Date Static intCount As Integer 1-54 变量赋值变量赋值 u直接赋值或通过返回值赋值直接赋值或通过返回值赋值 u如果是一个功能过程的返回值赋值,使用圆括号如果
30、是一个功能过程的返回值赋值,使用圆括号 Assign values directly intCount = 23 Assign a function return value strFilePathName = InputBox(File to open: ) Assign an object property strMapName = ThisDocument.Title ! 1-55 函数过程函数过程 u函数会返回一个值函数会返回一个值 u 定义函数名定义函数名 u调用函数的语法调用函数的语法: Value = Function ( arguments ) Call the TotalPr
31、ice function Private Sub Purchase() dblPrice = InputBox (Enter price before tax:) dblTotal = TotalPrice(dblPrice) MsgBox Here is the price including tax: & dblTotal End Sub The function procedure TotalPrice Private Function TotalPrice(Price As Double) As Double TotalPrice = Price * 1.0775 End Functi
32、on 1-56 比较变量的值比较变量的值 u使用关系操作符使用关系操作符 ( , , = ) u返回布尔型结果返回布尔型结果 (true/false) u函数函数 uIsDate uIsNumeric uIsNull uTypeName intAnswer = MsgBox (Delete File?, vbYesNo) MsgBox intAnswer = vbYes MsgBox Number? & IsNumeric(VagueVariable) strType = TypeName (VagueVariable) MsgBox Variable is of data type & st
33、rType 1-57 判断语句判断语句: The If then statement u根据条件分支执行根据条件分支执行 u使用布尔型表达式使用布尔型表达式 u作出决定如何执行作出决定如何执行 If intLayerCount 0 Then UIToolControl1_Enabled = True ElseIf pDoc.FocusMap.LayerCount = 0 Then UIToolControl1_Enabled = False End If EndFunction PrivateFunctionUIToolControl1_CursorID()As Variant UIToolC
34、ontrol1_CursorID = 3 crosshair EndFunction PrivateFunctionUIToolControl1_ToolTip()As String UIToolControl1_ToolTip = Zoom to rectangle EndFunction PrivateFunctionUIToolControl1_Message()As String UIToolControl1_Message = Zooms to a designated rectangle EndFunction 把该条目添加到工具条,点击运行,观察运行结把该条目添加到工具条,点击运
35、行,观察运行结 果。果。 1-85 5、使用使用VB创建一个创建一个COM组件组件 1 1、创建一个、创建一个ActiveXDLL工程工程 启动启动VB,在创建新工程的时候选择在创建新工程的时候选择“ActiveXDLL”类型。类型。 修改修改Class1类模块名称为类模块名称为“AdjacentTool”。 修改修改“Project1”工程名称为工程名称为“Tutorial”。 导入导入“ArcID”模块。模块。 保存类保存类“AdjacentTool”为为“Tutorial_AdjacentTool.cls”文件。保存工程为文件。保存工程为“Tutorial.vbp”文件。文件。 2 2、
36、引用对象库、引用对象库 在在VB的的“Project”菜单,选择菜单,选择“References”菜单条。菜单条。 在在“References”对话框,选择对话框,选择ArcMapObjectLibrary和和ESRIObjectLibrary。 (如果在条目中没有该两项,则查找引用如果在条目中没有该两项,则查找引用EsriMx.olb和和EsriCore.olb)单击单击“OK”按钮。按钮。 3 3、实现所需的接口、实现所需的接口 在在“AdjacentTool”类模块代码窗体顶部添加如下代码:类模块代码窗体顶部添加如下代码: OptionExplicit Implements IComma
37、nd Implements ITool Dim pApp As esriMx.Application ArcMap app Dim pDoc As ImxDocument 在代码窗口的左边组合框中选择在代码窗口的左边组合框中选择“Icommand”条目。在代码窗口的右边组合框中选择条目。在代码窗口的右边组合框中选择每一个每一个方法方法 或属性去创建空的过程。对或属性去创建空的过程。对“Itool”条目重复以上两项,创建每一个方法或属性的空过程。条目重复以上两项,创建每一个方法或属性的空过程。 1-86 5、使用使用VB创建一个创建一个COM组件组件 4 4、增加工具的区别代码、增加工具的区别代
38、码 PrivatePropertyGetICommand_Category()AsString Category属性表现为在属性表现为在“Customize”对话框的对话框的“Commands”页面的左边列表中页面的左边列表中 。 ICommand_Category = Tutorial EndProperty PrivatePropertyGetICommand_Caption()AsString Category属性表现为在属性表现为在“Customize”对话框的对话框的“Commands”页面的右边列表中。页面的右边列表中。 ICommand_Caption = AdjacentToo
39、l EndProperty PrivatePropertyGetICommand_Name()AsString ICommand_Name = Tutorial_AdjacentTool EndProperty 5 5、增加工具的描述代码、增加工具的描述代码 PrivatePropertyGetICommand_Message()AsString 鼠标移动经过时在状态条上显示的信息。鼠标移动经过时在状态条上显示的信息。 ICommand_Message = Selects features & Adjacent to the feature you click on EndProperty P
40、rivatePropertyGetICommand_Tooltip()AsString 鼠标移动经过时显示的信息。鼠标移动经过时显示的信息。 ICommand_Tooltip = Select adjacent features EndProperty 1-87 5 5、使用、使用VB创建一个创建一个COM组件组件 6 6、增加工具的可用性代码、增加工具的可用性代码 PrivateSubICommand_OnCreate(ByValhookAsObject) Set pApp = hook Set pDoc = pApp.Document EndSub PrivatePropertyGetIC
41、ommand_Enabled()AsBoolean With pDoc.FocusMap If .LayerCount 0 Then ICommand_Enabled = True ElseIf .LayerCount = 0 Then ICommand_Enabled = False End If End With EndProperty PrivateFunctionITool_Deactivate()AsBoolean 其他按钮按下是是否失效,缺省为其他按钮按下是是否失效,缺省为False ITool_Deactivate = True EndFunction 1-88 5 5、使用、使
42、用VB创建一个创建一个COM组件组件 7 7、增加工具的功能实现代码、增加工具的功能实现代码 Private Sub ITool_OnMouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long) Dim pScreenDisp As IScreenDisplay Dim pDt As IDisplayTransformation Dim pPt As IPoint Dim pMap As IMap Dim pLayer As IFeatureLayer Dim pSelEnv As
43、ISelectionEnvironment Dim pSelection As ISelection Dim pEnumFeat As IEnumFeature Dim pFeature As IFeature Dim pFeatureCursor As IFeatureCursor Dim pSpatialFilter As ISpatialFilter Dim pFeatureSelection As IFeatureSelection Dim pFillSymbol As ISimpleFillSymbol Dim pColor As IRgbColor Dim psym As ISym
44、bol 把屏幕坐标点转换成地图坐标点 Set pScreenDisp = pDoc.ActiveView.ScreenDisplay Set pDt = pScreenDisp.DisplayTransformation get the MouseDown location in map units Set pPt = pDt.ToMapPoint(X, Y) 引用一个图层 the tutorial expects the first layer to serve as the target Set pMap = pDoc.ActiveView.FocusMap Set pLayer = pM
45、ap.Layer(0) pLayer.Selectable = True 定义空间过滤条件 create a SpatialFilter to be used in a point in polygon selection Set pSpatialFilter = New SpatialFilter With pSpatialFilter Set .Geometry = pPt .GeometryField = _ pLayer.FeatureClass.ShapeFieldName .SpatialRel = esriSpatialRelWithin End With 空间查询 Set pF
46、eatureCursor = _ pLayer.Search(pSpatialFilter, False) pFeature is a polygon feature Set pFeature = pFeatureCursor.NextFeature create a SpatialFilter to be used in the search for polygons adjacent to pFeature Set pSpatialFilter = New SpatialFilter With pSpatialFilter Set .Geometry = pFeature.Shape .G
47、eometryField = _ pLayer.FeatureClass.ShapeFieldName .SpatialRel = esriSpatialRelTouches End With Set pFeatureSelection = pLayer QI 空间选择 pFeatureSelection.SelectFeatures _ pSpatialFilter, esriSelectionResultNew, False pFeatureSelection.SetSelectionSymbol = True 1-89 5 5、使用、使用VB创建一个创建一个COM组件组件 定义颜色及符号
48、 Set pColor = New RgbColor pColor.RGB = vbRed Set pFillSymbol = New SimpleFillSymbol pFillSymbol.Color = pColor pFillSymbol.Style = esriSFSSolid 显示选择结果 Set psym = pFillSymbol QI Set pFeatureSelection.SelectionSymbol = psym Dim pitem As ICommandItem pDoc.ActiveView.Refresh 使用内建命令统计选择集合 finish by disp
49、laying statistics for the adjacent features ArcID is a VB module that was exported from ArcMap Set pitem = pApp.Document.CommandBars _ .Find(ArcID.Query_SelectionStatistics) pitem.Execute End Sub 8 8、编译成、编译成DLL库库 在在VB的的“Project”菜单中,选择菜单中,选择“Tutorial Properties”,然后选择然后选择“Component”页面。页面。 选择选择“BinaryC
50、ompatibility”选项。单击选项。单击 “OK”。保存工程。在保存工程。在“File”菜单中,选择菜单中,选择 “MakeTutorial.dll”。 9 9、使用、使用ArcMap注册该组件库注册该组件库 启 动启 动 A r c M a p 在在 “ T o o l s ” 菜 单 中 选 择菜 单 中 选 择 “Customize”。点击点击“Customize”对话框中的对话框中的 “Addfromfile”按钮。双击按钮。双击“Tutorial.dll”。单单 击击“OK”按钮。可以看出在按钮。可以看出在“Customize”对话框对话框 的的“Commands”页面的左边增
51、加了一个名为页面的左边增加了一个名为 “ Tu t o r i a l ” 的 条 目 。 在 该 条 目 中 有 一 个的 条 目 。 在 该 条 目 中 有 一 个 “AadjacentTool”的命令。的命令。 1010、把组件添加到文档并使用。、把组件添加到文档并使用。 把上面注册的把上面注册的“AdjacentTool”命令拖放到一个命令拖放到一个 工具条上。使用该工具条,观察工具效果。(工具条上。使用该工具条,观察工具效果。( 使用使用USA的的STATES数据作为例子数据。)数据作为例子数据。) 1-90 6 6、框架对话框对象调用、框架对话框对象调用 以以CoordinateD
52、ialog坐标对话框为例的坐标对话框为例的VBA宏例子:宏例子: PublicSubCoordDlg() 定义一个坐标对话框定义一个坐标对话框 DimpCoordDlgAsICoordinateDialog DimboolValidAsBoolean SetpCoordDlg=NewCoordinateDialog 显示该对话框,接受坐标输入显示该对话框,接受坐标输入 boolValid=pCoordDlg.DoModal(EnterX&Ycoordinates,1,1,3,Application.hWnd) IfboolValidThen 如果是有效输入如果是有效输入 MsgBoxX:&pC
53、oordDlg.X&vbNewLine&Y:&pCoordDlg.Y Else 如果是无效输入如果是无效输入 MsgBoxBadentries. EndIf EndSub ProgreseDialog进程条对话框进程条对话框: :动态显示进程动态显示进程 CoordinateDialog坐标对话框坐标对话框:输入输入X、Y坐标。坐标。 GetStringDialog字符串对话框字符串对话框:取得字符串取得字符串 NumberDialog数字对话框数字对话框: :输入一个数值输入一个数值 ListDialog列表对话框列表对话框: :列表显示数值或字符值列表显示数值或字符值 MessageDia
54、log消息对话框消息对话框: :显示消息。显示消息。 GetUserAndPassWordDialog用户密码对话框用户密码对话框: :取得用户和密码。取得用户和密码。 1-91 7 7、空间书签管理(添加空间书签)、空间书签管理(添加空间书签) Private Sub AddSpatialBookMark_Click() 定义文档对象 Dim pMxDoc As IMxDocument 定义地图对象 Dim pMap As IMap 定义活动视图对象 Dim pActiveView As IActiveView 定义空间书签对象 Dim pAreaOfInterest As IAOIBook
55、mark 定义地图书签集合对象。因为所有的空间书签都是由Map对象来管理的 。 Dim pMapBookmarks As IMapBookmarks 取得文档对象 Set pMxDoc = Application.Document 取得焦点Map对象 Set pMap = pMxDoc.FocusMap 设置当前活动视图 Set pActiveView = pMap 创建一个新的空间书签对象,并设置它定位到焦点地图的当前可视范围 Set pAreaOfInterest = New AOIBookmark Set pAreaOfInterest.Location = pActiveView.Extent 设置空间书签的名称属性 pAreaOfInterest.Name = My bookmark 取得当前地图书签集合对象 Set pMapBookmarks = pMap 把空间书签加入到集合中 pMapBookmarks.AddBookmark pAreaOfInterest End Sub SpatialBookmark保存的是地图保存的是地图 的范围。就像书签一样可以快速地定的范围。就像书签一样可以快速地定 位到一个预先定义好的相关主题区域位到一个预先定义好的相关主题区域 去。空间书签的管理主要是增加、调去。空间书签的管理主要是增加、调 用、删除空间书
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业管理-厂区园区物业管理制度
- 河南省漯河市召陵区许慎中学2025-2026学年初三下学期期末考试试题含解析
- 四川省乐山市井研县2026年初三下5月第一次质量检测试题物理试题理试题含解析
- 江苏省大丰市万盈初级中学2025-2026学年初三下期始考数学试题含解析
- 四川省南充市南部县重点名校2026届初三5月教学质量调研物理试题含解析
- 吉林省德惠市2026届中考物理试题冲刺卷(二)含解析
- 浙江同济科技职业学院《现代检测技术》2024-2025学年第二学期期末试卷
- 四川省青神县2025-2026学年初三1月调研(期末)测试数学试题含解析
- 骨科患者的营养护理
- 膀胱造瘘术患者的微创治疗
- 乡镇禁毒举报奖惩制度
- 2026年江西赣州市高三一模高考数学试卷试题(含答案详解)
- 2026年安徽新闻出版职业技术学院单招综合素质考试题库及一套答案详解
- 2023年毕节地区毕节市广播电视台(融媒体中心)招聘笔试题库及答案解析
- 2型糖尿病及围手术期血糖管理【骨科】-课课件
- 毕业证明书申请表(模板)
- 第5章护际关系伦理第6章课件讲义
- 国际标准行业分类第4版ISICRev-4中文版
- 特种设备安全培训课件
- (2023最新)给水排水管道工程施工及验收规范
- 部编人教版九年级历史下册全册知识点总结
评论
0/150
提交评论