Elemente eines Layers anklickbar machen

Hallo,
ich habe folgendes Problem: Durch Anklicken einzelner Elemente eines Layers mit der Maus soll eine bestimmte Funktion durchgeführt werden. Weiß vielleicht jemand, wie man dieses Problem mit VBA programmatisch lösen kann?
Ich freue mich über jede Hilfe,
Danke Uli
Hallo Ulrike,

kommt evtl. ein bißchen drauf an, was Du genau wann machen willst. Du könntest einerseits z.B. mit einem separaten UiToolControl arbeiten andererseits auf Events Deiner diversen Objekte reagieren (->"With Events"). Für beides findest Du in der Developer Help Beispiele ("IUIToolControlEvents", "IEditEvents", "IActiveViewEvents")
Vielleicht hilft Dir das ja schon weiter?

Viele Grüße
Jörg Ostendorp
Hallo Jörg,
ich habe ein shapefile, in dem Rechtecke gezeichnet wurden, die die Umrisse von Luftbildaufnahmen repräsentieren. Diese Rechtecke sollen, sobald sie gezeichnet wurden, einzeln anklickbar sein, woraufhin das dazugehörige Luftbild in die aktuelle Karte der Arcmap-Anwendung geladen wird.
Also sobald eines dieser Objekte des Shapefiles angeklickt wird, soll die Funktion aufgerufen werden, die das Bild in die Karte lädt.
Vielleicht fällt Dir ja noch was dazu ein, aber ich suche auf jeden Fall auch bei den Beispielen.
Vielen Dank, Uli
Hallo auch,

in den Layer-Eigenschaften findest du auf der Registerkarte DISPLAY die Option Support Hyperlinks mit der Variante Makro. Mit einem entsprechenden Makro solltest du deine Luftbilder laden können. Siehe z. B. Add a Raster layer to a map.

Gruss

Uwe
Auch Hallo,

die Dingers hatte ich schon wieder verdrängt. Ziehe meine Antwort beschämt zurück ;-(

Viele Grüße
Jörg Ostendorp
Hallo Uwe,
das ich ein Makro schreiben soll ist klar, nur wie sieht der Code aus, um ein Element eines Layers "Anklickbar" zu machen?
Bei ArcGis Developer Online habe ich bis jetzt nichts gefunden, wenn mir jemand weiterhelfen könnte, wäre das echt super.
Vielen Dank
Uli
Hallo Uli,

um zunächst ein Grundgerüst für ein Makro zu erstellen, musst du wie folgt vorgehen:

1. Layer-Eigenschaften -> Registerkarte Display -> Hyperlinks
- Support Hyperlinks aktivieren
- Feld auswählen
- Create Macro drücken

2. Save in: MeinProjekt

3. Module: MeineMakros

4. Macro: MeinErstesMakro

Jetzt sollten die Elemente bereits mit dem Hyperlink-Werkzeug anklickbar sein. Das automatisch erstellte Makro gibt den Inhalt des ausgewählten Feldes in einer Msgbox aus.

Den Code für das Makro findest du wie angegeben innnerhalb deines Projektes im Modul MeinMakros. Dort musst du deinen Code ergänzen.

Gruss

Uwe
Hallo Uwe,
das funktioniert jetzt erst mal, ist zwar etwas geschummelt, weil ich eigentlich das Makro selbst schreiben sollte, aber für's erste tut sich jetzt wenigstens mal was.
Vielleicht weißt Du ja auch, wie man an den Code zu solch einem Tool drankommt?
Vielen Dank
Uli
Hallo Ulrike,

wenn ich das richtig mitbekommen habe, hast Du ja eine Art Importroutine für die Herstellung Deiner Shapes, hast also schon mal eine Referenz auf Deinen Featurelayer mit den Dummys. Für diesen kannst Du die von Uwe genannten Einstellungen natürlich auch per Code setzen:

Sub DeineImportRoutine()
'...
'Dim pFeaturelayer As IFeatureLayer
'...
Dim pHotlinkcontainer As IHotlinkContainer
Dim pHotlinkmacro As IHotlinkMacro

Set pHotlinkcontainer = pFeaturelayer
Set pHotlinkmacro = pFeaturelayer
pHotlinkcontainer.HotlinkField = "DeinHyperlinkFeld"
pHotlinkcontainer.HotlinkType = esriHyperlinkTypeMacro
pHotlinkmacro.MacroName = "DeinProject.DeinModul.DeineHyperlinkProzedur"
pdoc.ActiveView.Refresh
End Sub

'In Deiner Hyperlinkprozedur dann:
Sub DeineHyperlinkProzedur(pLink, pLayer)
Dim pHyperlink As IHyperlink
Set pHyperlink = pLink
Dim pFLayer As IFeatureLayer
Set pFLayer = pLayer
AddRasterLayer OpenRasterDataset( _
Left$(pHyperlink.Link, InStrRev(pHyperlink.Link, "\")), _
Mid$(pHyperlink.Link, InStrRev(pHyperlink.Link, "\") + 1, Len(pHyperlink.Link)))
End Sub

'Und der Vollständigkeit halber hier nochmal die zugehörigen ESRI-Beispiel-Funktionen zum Einfügen eines Rasterlayers:
Public Function OpenRasterDataset(sPath As String, sFileName As String) As IRasterDataset
' sPath: directory where dataset resides
' sFileName: name of the raster dataset
On Error GoTo ErrorHandler

' Create RasterWorkSpaceFactory
Dim pWSF As IWorkspaceFactory
Set pWSF = New RasterWorkspaceFactory

' Get RasterWorkspace
Dim pRasWS As IRasterWorkspace
If pWSF.IsWorkspace(sPath) Then
Set pRasWS = pWSF.OpenFromFile(sPath, 0)
Set OpenRasterDataset = pRasWS.OpenRasterDataset(sFileName)
End If

' Release memeory
Set pRasWS = Nothing
Set pWSF = Nothing
Exit Function
ErrorHandler:
Set OpenRasterDataset = Nothing
End Function

Sub AddRasterLayer(pRasterDs As IRasterDataset)
'pRasterDs represets a RasterDataset from raster workspace, access workspace or sde workspace.

'Create a raster layer. Use CreateFromRaster method when creating from a Raster.
Dim pRasterLy As IRasterLayer
Set pRasterLy = New RasterLayer
pRasterLy.CreateFromDataset pRasterDs

'Add the raster layer to ArcMap
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
pMxDoc.FocusMap.AddLayer pRasterLy
pMxDoc.ActiveView.Refresh
End Sub

In Deinem Dummmy-Hyperlinkfeld müßte also der vollständige Pfad zum Bild stehen, beim Klick auf das Bild mit dem Hyperlinkwerkzeug wird dann automatisch das Bild nachgeladen. Fehlt halt ggf. noch eine Prüfung, ob der Layer nicht bereits existiert etc.

Viele Grüße
Jörg Ostendorp
Hallo Jörg,
vielen Dank, werde mal sehen, was ich draus machen kann.
Uli
Hallo, nochmal ich,
es funktioniert jetzt alles, ich danke euch vielmals!
Ulrike