обработать событие изменения ActiveView

0 голосов
спросил 04 Фев, 05 от Abraxx (1,140 баллов) в категории Программные продукты Esri
как это сделать? и самое главное, где оно обрабатывается? (вопрос наверняка тупой, но объясните, плиз)

5 Ответы

0 голосов
ответил 04 Фев, 05 от Ulukbek (6,020 баллов)

Если очень кратко, то так. Надеюсь, названия функции говорят сами за себя. glEditor - имя Public переменной, который указывает на Editor...

Option Explicit

Private WithEvents pActiveViewEvents As Map
Public WithEvents EditorEvents As Editor
Public pEditor As IEditor

Private Sub EditorEvents_OnChangeFeature(ByVal obj As IObject)
   '
End Sub

Private Sub EditorEvents_OnSketchFinished()
   '
End Sub

Private Sub EditorEvents_OnSketchModified()
   '
End Sub

Private Sub EditorEvents_OnCreateFeature(ByVal obj As IObject)
  
End Sub

Private Sub EditorEvents_OnSelectionChanged()
  '
End Sub

Private Function MxDocument_ActiveViewChanged() As Boolean
   '
End Function

Private Function MxDocument_CloseDocument() As Boolean
   '
End Function

Function MxDocument_OpenDocument() As Boolean

  InitEvents
 
End Function

Public Sub InitEvents()
   Set pActiveViewEvents = pMxDoc.FocusMap
   Set pEditor = glEditor
   If Not pEditor Is Nothing Then Set EditorEvents = pEditor
End Sub

 

0 голосов
ответил 04 Фев, 05 от Abraxx (1,140 баллов)
большое спасибо, теперь я понимаю больше. правда, я вопрос не совсем правильно задал :) для события изменения ActiveView в MxDocument есть специальный обработчик ActiveViewChanged. Мне же нужно обрабатывать события для  Tool'ов (Zoom In, Zoom Out, Pan и т.п.), а не для Editor'a (если я правильно понял назначение приведённого вами кода).  Насколько я понял, для Tool'а Events вообще не предусмотрены :( или я не прав?
0 голосов
ответил 04 Фев, 05 от Alexander1 (32,520 баллов)

Попробуй сам для себя сформулировать - а что есть такое "события для Tool'ов (Zoom In, Zoom Out, Pan и т.п.)".

По принципу тех-же событий для документа. Например, "OpenDocument" - это СОБЫТИЕ для документа, т.к. что-то произошло с документом.

0 голосов
ответил 05 Фев, 05 от Abraxx (1,140 баллов)
Под событием я имел в виду обработчик для следующих действий: выбор кнопки Zoom In, выделение приближаемой области и последующее приближение к ней.
Для Editor'а ведь есть событие типа OnSketch
0 голосов
ответил 06 Фев, 05 от Alexander1 (32,520 баллов)

У Editor Class действительно есть несколько интерфейсов для перехвата соответствующих событий. Но это не означает, что подобное есть для каждого Tool.

В каждом конкретном случае нужно искать отдельное решение. Например, определить, что пользователь воспользовался PanZoom_ZoomIn Tool, можно перехватив событие ViewRefreshed  (IActiveViewEvents Interface):

Private Sub m_pViewEvents_ViewRefreshed(ByVal View As IActiveView, ByVal phase As esriViewDrawPhase, ByVal data As Variant, ByVal Envelope As IEnvelope)
Dim pCommandItem As ICommandItem
    Set pCommandItem = my_App.CurrentTool
'
    If pCommandItem.Name = "PanZoom_ZoomIn" Then
        MsgBox pCommandItem.Name

    End If
End Sub

Но дать более конкретный совет можно, если опишешь , что нужно сделать в приложении.

 

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...