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
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
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Gast am Di., 05.04.2005 - 14:34
Permalinkkommt 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
Gespeichert von Gast am Di., 05.04.2005 - 15:14
Permalinkich 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
Gespeichert von uwelangehh am Di., 05.04.2005 - 16:36
Permalinkin 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
Gespeichert von Gast am Di., 05.04.2005 - 17:15
Permalinkdie Dingers hatte ich schon wieder verdrängt. Ziehe meine Antwort beschämt zurück ;-(
Viele Grüße
Jörg Ostendorp
Gespeichert von Gast am Do., 07.04.2005 - 11:01
Permalinkdas 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
Gespeichert von uwelangehh am Do., 07.04.2005 - 11:30
Permalinkum 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
Gespeichert von Gast am Do., 07.04.2005 - 12:00
Permalinkdas 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
Gespeichert von Gast am Do., 07.04.2005 - 12:27
Permalinkwenn 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
Gespeichert von Gast am Do., 07.04.2005 - 13:19
Permalinkvielen Dank, werde mal sehen, was ich draus machen kann.
Uli
Gespeichert von Gast am Fr., 08.04.2005 - 15:05
Permalinkes funktioniert jetzt alles, ich danke euch vielmals!
Ulrike