VB代码:

复制进程序稍作修改变量名和事件逻辑即可使用。

Members

  AllPropertiesMethodsInheritedNon-inherited Description
Display The display the feedback object will use.
MoveTo Move to the new point.
Refresh Call this after a refresh to show feedback again.
Start Begins a move feedback of the given shape.
Stop Stops the feedback and returns the shape.
Symbol The symbol the feedback object will use.

Moving Feedbacks Example

This example shows how to create a tool which allows the user to move various geometry types using the appropriate feedback interfaces. The example requires there to be at least one of the following in the current document's BasicGraphicsLayer: MarkerElement, LineElement, RectangleElement, or PolygonElement. When the mouse button is pressed a search is made for any elements which intersect the mouse location. If any are found, then the first of these is taken. If the element's geometry is a Point, Polyline, Envelope or Polygon, then a Feedback object of that type is created, otherwise nothing is created and the routine will exit. Once the feedback has been created, any subsequent mouse movements cause this feedback to be moved on the screen. Releasing the mouse button will stop the feedback and update the element with the new geometry. The ActiveView is then refreshed.

How to use:

In ArcMap, select Tools | Customize...

Select the Commands tab and scroll down to UIControls in the left pane.

Click NewUIControl...

In the dialog which appears select UIToolControl and then click Create.

Drag the new tool which appears in the right pane onto a toolbar of your choosing.

Right-click over your tool on the toolbar and select View Source.

Copy and paste the code below into the VBA code pane which appears.

Close the VBA Window and return to the ArcMap Window.

Now select your tool from the toolbar and click on a graphic element (Marker, Line, Rectangle, Polygon) and move the mouse until the desired location is reached. Releasing the mouse button to finish.

Private m_pDoc As IMxDocument

Private m_pAV As IActiveView

Private m_pScrD As IScreenDisplay

Private m_pDispFeed As IDisplayFeedback

Private m_pHitElem As IElement

Private m_pGraCont As IGraphicsContainer

Private Function UIToolControl1_Enabled() As Boolean

  'Set the ToolControl to enabled (disabled by default)

  UIToolControl1_Enabled = True

End Function

Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)

  Dim pPnt As IPoint

  Dim pGeomElem As IGeometry

  ' Get the current mouse location in Map Units

  Set pPnt = m_pScrD.DisplayTransformation.ToMapPoint(x, y)

  ' Use a function to return the first element at this point (if any)

  Set m_pHitElem = GetHitElement(pPnt)

  ' If an element was returned then check what type of geometry it has (Point, Polyline, Envelope or Polygon)

  If Not m_pHitElem Is Nothing Then

    Set pGeomElem = m_pHitElem.Geometry

    'Point geometry

    If TypeOf pGeomElem Is IPoint Then

      ' Create a MovePointFeedback object and set its display property (to the ActiveView's ScreenDisplay)

      Set m_pDispFeed = New MovePointFeedback

      Set m_pDispFeed.Display = m_pScrD

      ' QI for the IMovePointFeedback interface

      Dim pMvPtFeed As IMovePointFeedback

      Set pMvPtFeed = m_pDispFeed

      'Start the feedback using the input (Point) geometry at the current mouse location

      pMvPtFeed.Start pGeomElem, pPnt

    ' Polyline geometry

    ElseIf TypeOf pGeomElem Is esriCore.IPolyline Then

      ' Create a MoveLineFeedback object and set its display property (to the ActiveView's ScreenDisplay)

      Set m_pDispFeed = New MoveLineFeedback

      Set m_pDispFeed.Display = m_pScrD

      ' QI for the IMoveLineFeedback interface

      Dim pMvLnFeed As IMoveLineFeedback

      Set pMvLnFeed = m_pDispFeed

      'Start the feedback using the input (Polyline) geometry at the current mouse location

      pMvLnFeed.Start pGeomElem, pPnt

    ' Rectangle (Envelope) geometry

    ElseIf TypeOf pGeomElem Is IEnvelope Then

      ' Create a MoveEnvelopeFeedback object and set its display property (to the ActiveView's ScreenDisplay)

      Set m_pDispFeed = New MoveEnvelopeFeedback

      Set m_pDispFeed.Display = m_pScrD

      ' QI for the IMoveEnvelopeFeedback interface

      Dim pMvEnvFeed As IMoveEnvelopeFeedback

      Set pMvEnvFeed = m_pDispFeed

      'Start the feedback using the input (Rectangle) geometry at the current mouse location

      pMvEnvFeed.Start pGeomElem, pPnt

    ' Polygon geometry

    ElseIf TypeOf pGeomElem Is IPolygon Then

      ' Create a MovePolygonFeedback object and set its display property (to the ActiveView's ScreenDisplay)

      Set m_pDispFeed = New MovePolygonFeedback

      Set m_pDispFeed.Display = m_pScrD

      ' QI for the IMovePolygonFeedback interface

      Dim pMvPolyFeed As IMovePolygonFeedback

      Set pMvPolyFeed = m_pDispFeed

      'Start the feedback using the input (Polygon) geometry at the current mouse location

      pMvPolyFeed.Start pGeomElem, pPnt

    End If

  End If

End Sub

Private Sub UIToolControl1_MouseMove(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)

  If Not m_pDispFeed Is Nothing Then

    Dim pPnt As IPoint

    ' Get the current mouse location in Map Units and move the feedback

    Set pPnt = m_pScrD.DisplayTransformation.ToMapPoint(x, y)

    m_pDispFeed.MoveTo pPnt

  End If

End Sub

Private Sub UIToolControl1_MouseUp(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)

  Dim GeomResult As IGeometry

  Dim pGeomElem As IGeometry

  ' Check that the user is using the feedback

  If Not m_pHitElem Is Nothing Then

    ' Get the geometry type for our element again

    Set pGeomElem = m_pHitElem.Geometry

    ' Check what type of geometry the element has  (again)

    ' Point geometry

    If TypeOf pGeomElem Is IPoint Then

      ' QI for the IMovePointFeedback interface and get the finished geometry

      Dim pMvPtFeed As IMovePointFeedback

      Set pMvPtFeed = m_pDispFeed

      Set GeomResult = pMvPtFeed.Stop

    ElseIf TypeOf pGeomElem Is IPolyline Then

      ' QI for the IMoveLineFeedback interface and get the finished geometry

      Dim pMvLnFeed As IMoveLineFeedback

      Set pMvLnFeed = m_pDispFeed

      Set GeomResult = pMvLnFeed.Stop

    ElseIf TypeOf pGeomElem Is IEnvelope Then

      ' QI for the IMoveEnvelopeFeedback interface and get the finished geometry

      Dim pMvEnvFeed As IMoveEnvelopeFeedback

      Set pMvEnvFeed = m_pDispFeed

      Set GeomResult = pMvEnvFeed.Stop

    ElseIf TypeOf pGeomElem Is IPolygon Then

      ' QI for the IMovePolygonFeedback interface and get the finished geometry

      Dim pMvPolyFeed As IMovePolygonFeedback

      Set pMvPolyFeed = m_pDispFeed

      Set GeomResult = pMvPolyFeed.Stop

    End If

    ' Set the geometry of the element and call update

    m_pHitElem.Geometry = GeomResult

    m_pGraCont.UpdateElement m_pHitElem

    ' Clear out the objects

    Set m_pDispFeed = Nothing

    Set m_pHitElem = Nothing

    ' Refresh the ActiveView

    m_pAV.Refresh

  End If

End Sub

Private Sub UIToolControl1_Refresh(ByVal hDC As Long)

  'Get a reference to the ActiveView and ScreenDisplay

  Set m_pDoc = Application.Document

  Set m_pAV = m_pDoc.ActiveView

  Set m_pScrD = m_pAV.ScreenDisplay

End Sub

Private Sub UIToolControl1_Select()

  'Get a reference to the ActiveView and ScreenDisplay

  Set m_pDoc = Application.Document

  Set m_pAV = m_pDoc.ActiveView

  Set m_pScrD = m_pAV.ScreenDisplay

End Sub

Private Function GetHitElement(pInPt As IPoint) As IElement

' Takes an IPoint and returns the first element that is hit (if any) in the ActiveView's BasicGraphicsLayer

  Dim pEnumElem As IEnumElement

  Dim DblSrchDis As Double

  ' QI for the IGraphicsContainer interface from the IActiveView, allows access to the BasicGraphicsLayer

  Set m_pGraCont = m_pAV

  ' Calculate the Search Distance (in MapUnits) based upon a portion of the ActiveView's width

  DblSrchDis = m_pAV.Extent.Width / 

  ' Return an enumerator for those elements found within the search distance (in mapunits)

  Set pEnumElem = m_pGraCont.LocateElements(pInPt, DblSrchDis)

  ' If the enumerator is not empty then return the FIRST element found

  If Not pEnumElem Is Nothing Then

    Set GetHitElement = pEnumElem.Next

  End If

End Function

arcgis engine 监听element的添加、更新和删除事件(使用IMovePointFeedback)的更多相关文章

  1. arcgis engine 监听element的添加、更新和删除事件(使用IGraphicsContainerEvents)

    IGraphicsContainerEvents Interface 如何监听 element事件? 如,当我们在Mapcontrol上添加.删除.更新了一个Element后,如何捕捉到这个事件?   ...

  2. 如何监听Element组件<el-input>标签的回车事件

    一.现象 表单提交时需要处理输入框的回车事件,一般的原生input标签可以用@keyup.enter="onSubmit"(tips:onSubmit为定义的方法) 二.解决 1. ...

  3. ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新

    ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 来自:http://blog.csdn.net/freewaywalker/article/details/23703863 ...

  4. [转] ArcGIS engine中气泡标注的添加、修改

    小生 原文 ArcGIS engine中气泡标注的添加.修改! 你微微地笑着,不同我说什么话.而我觉得,为了这个,我已等待得久了.                                   ...

  5. Android 另类方法监听软键盘的弹出收起事件

    http://www.cnblogs.com/csonezp/p/5065624.html 最近做的项目碰到个问题,a界面是fragment+recyclerview,b界面带个edittext,并且 ...

  6. Canal 实战 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存

    一. Canal 简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同 ...

  7. vue watch 监听element upload组件上传成功返回的url列表

    因为 on-success 上传成功返回的是一个异步的结果....如果父组件需要这个结果的话 必须用watch 监听 然后里面建立一个 save()方法 save方法里面再调用接口 传需要的上传之后的 ...

  8. angular指令监听ng-repeat渲染完成后执行自定义事件方法

    今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令. 在ng-repeat模板实例内部会暴露 ...

  9. 监听文本框输入oninput和onpropertychange事件

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...

随机推荐

  1. Oracle触发器原理、创建、修改、删除

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  2. oracle行转列与列转行

    一.行转列 在有些应用场景中,如学生成绩.学生所有科目的成绩都保存到一张表里面,当我们需要以列表的形式显示出学生所对应的每一科目的成绩的时候,需要使用到行转列. 示例 -- 学生成绩表 create ...

  3. linux 环境下安装mysql5.6

    在网上找了很多博客 看着头晕眼花 各个步骤 最终功夫不负有心人 终于安装好了 特此整理分享一下 1> #yum remove mysql mysql-*    //卸载原先版本的mysql 2& ...

  4. java中执行系统命令

    java程序中执行系统命令猛击下面的链接看看你就知道怎么用了 http://blog.csdn.net/a19881029/article/details/8063758 http://wuhongy ...

  5. Entity Framework Code First反向生成代码

    那些年我们生成的代码 早年,笨点的方法通常都是使用DbFirst先生成cs,然后把CS复制出来做些修改 后台基本上就自己使用T4来写,但是一直也没时间完善成通用的版本 MS官方 提供了EntityFr ...

  6. IBM云的商务动作之我见(2):IBM 和 VMware 战略合作推进混合云

    本系列文章基于公开信息,对IBM云的近期商务动作比如收购.战略合作.整合等,给出本人的快速分析,仅仅代表本人个人观点,和本人所在的公司和所在的岗位没有任何关系: (1)IBM 收购 Blue Box ...

  7. 综合实战--文件上传系统【JDBC&IO&Socket】

    本文纯属记录第一次实战遇到的坑和知识,如果后边有时间再做整理. 1,先写了个操作数据库的工具类SqlTool,照着JDBC资料打完之后,测试的时候出错了,java.lang.ClassNotFound ...

  8. jdbc java数据库连接 6)类路径读取——JdbcUtil的配置文件

    之前的代码中,以下代码很多时候并不是固定的: private static String url = "jdbc:mysql://localhost:3306/day1029?useUnic ...

  9. oracle基本操作符/运算符/操作语言

    racle中的操作符算术操作符: 无论是在sqlserver,或者是java中,每种语言它都有算术操作符,大同小异.Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle中 ...

  10. iis

    IIS架构 1.   概述 为了提高IIS的可靠性,安全性以及可用性,与IIS5.0和以前更早的版本不同,IIS6.0提供了一个全新的IIS架构.这个架构的详细情况如下图所示:             ...