GeomarketingForum.com
September 05, 2010, 10:40:01 *
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: Verfolge alle RegioGraph Meldungen auf Twitter
www.twitter.com/regiographpress
 
   Übersicht   Hilfe Suche Kalender Login Registrieren  
Seiten: [1]
  Drucken  
Autor Thema: [Gelöst] LayerVisibleInMap Problem  (Gelesen 610 mal)
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« am: Mai 22, 2009, 08:18:07 »

Hallo Leute,
Wie ihr oben schon gemerkt habt geht es um LayerVisibleInMap.

Problem:
         Wenn ich einen Layer übers VBA auf false setze funktioniert es einwandfrei
         Aber wenn ich dann einen weiteren Layer einfügen möchte bekomme ich eine fehlermeldung.
         Diese meldung bekomme ich auch dann wenn ich einfach alle Layer durchgehe und diese ebenfals auf false setze knallt es spätestens beim zweitem layer.

Weis jemand woran das liegt?
Der Pfad verweist auf eine txt Datei in CSV format gespeichert ist:
Inhalt

Zitat
Deutschland Höhenschichten;false
Deutschland Städte 10.-20.000 2004;false
Deutschland Städte >100.000 2004;true
Deutschland Städte 20.-50.000 2004;true
Deutschland Flüsse 2004;true
Deutschland PLZ(5)-Geb. 2004;false

Der Code:
Zitat
Function AddFolie(Pfad As String, layoutName As String) As Integer
    'Start der Variablen definition
    Dim Layername As String
    Dim clay As rgLayer
    Dim layerSamlung As rgMapCollection
    Dim i As Integer
    Dim layoutNew As rgLayout
    Dim variable As String
    Dim colName As rgColumnDef
    Dim TemplatesPfad As String
    Dim ergPfad As String
    Dim z() As String
    'Dim test As rgcNorthArrow
    '---------------------------------
    TemplatesPfad = ""
    Set layoutNew = project.SearchLayoutByName(layoutName)          'Sucht im Project nach dem Aktuellem Layout und setzt ihn als "Markierten/Activ"
    i = 0                                                           'Die Variable i wird auf 0 gesetzt um die reihenfolge der Layer zu gewärleisten
    Set layerSamlung = layoutNew.maps                               'Setzt die MapCollection = der MapCollection aus dem aktuellem Layout
    layerSamlung.Item(0).NorthArrowType = nArrowType2               'Der PfeilTyp der die Himelsrichtung anzeigt wird gesetzt
    layerSamlung.Item(0).NorthArrowVisible = True                   'Der Pfeil wird auf dem Layout eingeblendet
    Open Pfad For Input As #3                                       'Öffnet die datei zum seuqnziellem lesen und vergib einen alias namen
    Do While Not EOF(3)                                             'Die while schleife läuft so lange die datei durch bis EndOfFile auftritt
    Line Input #3, variable                                         'Liest die zeile und schreibt diese in eine variable
        Layername = variable                                        'Setzt den layerName = der variable
        z = Split(Layername, ";")                                   'String wird zerlegt und in ein Arraygespeichert als Parameter wird der String und trenzeichen übergeben
        Set clay = project.SearchLayerByName(z(0))                  'Sucht den layerName im projekt und setzt diesen als markiert
        If clay Is Nothing Then                                     'Wenn der Layer nicht im Projekt vorhanden ist
         'MsgBox "nicht im projekt"
            TemplatesPfad = TemplatesPfad & z(0) & ".RX5"           'der Pfad wird gesetzt wo sich alle Vorlagen befinden
            If FileExists(TemplatesPfad) Then
                ergPfad = project.ImportLayerTemplate(TemplatesPfad)    'Wird dieser versucht hinzuzufügen
            Else
                MsgBox "Der Layer " & z(0) & " wurde nicht gefunden"
            End If
            If ergPfad = "" Then                                    'prüfen ob der Layer in den Vorlagen gefunden wurde
                'MsgBox "Der Layer wurde nicht gufunden"            'Die Fehlermeldung wird rausgegeben fals es keine Vorlage gufunden wurde
            Else
                Set clay = project.SearchLayerByName(z(0))          'ansonsten: Sucht den layerName im Projekt und setzt diesen als markiert
                clay.LoadLayer                                      'Lädt den Layer in den Speicher
                layerSamlung.Item(0).AddLayer clay.LayerKey, i      'Setzt den Layer in die LayerCollection
                i = i + 1
            End If
        Else
            clay.LoadLayer                                          'Lädt den Layer in den Speicher
            layerSamlung.Item(0).AddLayer clay.LayerKey, i          'Setzt den Layer in die LayerCollection
           
           
            If z(1) = "false" Then                   <---------------------------So Hier ist die Prüfung auf den String
                   layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = False
            End If
           
            'layerSamlung.Item(i).InfoLayerIndex (1)
            'MsgBox layerSamlung.Item(i).ID
            i = i + 1                                               'i wird um eins erhöt damit der nächste layer drüber liegt
        End If
        'clay.CloseLayer
    Loop                                                            'Kehr zurück zu while anweisung und alles beginnt von vorne
    Close #3                                                        'Schließt die Datei #3
   
    AddFolie = i
End Function
« Letzte Änderung: Mai 22, 2009, 10:52:49 von SiRo » Gespeichert

Nobody is perfect but Nobody is perfect
Peter
Full Member
***
Beiträge: 120


Profil anzeigen
« Antwort #1 am: Mai 22, 2009, 08:29:10 »

Ich kapiere kein Wort  Huh

gehts um diese Zeile ?
layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = z(1)

Wenn ja, was UGW steht in z(1)?
Gespeichert
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« Antwort #2 am: Mai 22, 2009, 08:32:37 »

oh ok dann ganz von vorne:
in z(1) steht nur true oder false

layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = z(1)
'layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = False

Das problem bei mir ist wenn ich diese anweisung mehrmals hintereinander ausführe kommt eine Fehlermeldung "Ungültiger Prozeduraufruf"
Gespeichert

Nobody is perfect but Nobody is perfect
paff
Administrator
Hero Member
*****
Beiträge: 820


439627146
Profil anzeigen WWW
« Antwort #3 am: Mai 22, 2009, 08:47:29 »

Z() ist aber ein String

Dat ist nicht dein Ernst Wink

hier mußt du dann mit 0 und -1 arbeiten
Gespeichert

Follow RegioGraph on Twitter
http://twitter.com/regiograph
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« Antwort #4 am: Mai 22, 2009, 08:51:16 »

 Grin Grin

Daran liegt es nicht ich hab ja uch schon versucht durchgehend einfach mal alle Layer auf False zu setzen

For i = 0 To 3
     layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = False
Next i

das gleiche Problem

z(1) wird auch nocht aufbereitet und später auf integer oder auf bool gekastet das ist das geringere übel :/

PS Normalerweise ist da nocht eine Abfrage

 If z(1) = "false" Then
                layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = False  Roll Eyes
 End If
« Letzte Änderung: Mai 22, 2009, 09:17:22 von SiRo » Gespeichert

Nobody is perfect but Nobody is perfect
paff
Administrator
Hero Member
*****
Beiträge: 820


439627146
Profil anzeigen WWW
« Antwort #5 am: Mai 22, 2009, 09:41:57 »

Ok ich verstehe das Problem und erinnere mich nun dunkel
Das hatte ich auch mal

Nach Aktionen wie LayerVisibleInMap oder ähnlichem

wird die rgMapCollection intern neu "initialisiert" dadurch hast du nach dem ersten durchlauf
 layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = False
kein Objekt mehr zum zuweisen
Frag nicht warum , ist intern einfach so

das hier hilft erstmal
For i = 0 To 3
    Set layerSamlung = ActiveLayout.maps
    layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = False
Next
 
Idee wäre die MapLayers Collection als Objektvariable zu setzen und dann durchlaufen
Gespeichert

Follow RegioGraph on Twitter
http://twitter.com/regiograph
paff
Administrator
Hero Member
*****
Beiträge: 820


439627146
Profil anzeigen WWW
« Antwort #6 am: Mai 22, 2009, 09:43:52 »

So gehts  Grin

Dim layerSamlung As rgMapCollection
Dim meinemap As rgMap

Set layerSamlung = ActiveLayout.maps
Set meinemap = layerSamlung.Item(0)
For i = 0 To 2
    meinemap.MapLayers(i).LayerVisibleInMap = False
Next
Gespeichert

Follow RegioGraph on Twitter
http://twitter.com/regiograph
SiRo
Newbie
*
Beiträge: 39


174263400
Profil anzeigen
« Antwort #7 am: Mai 22, 2009, 10:00:31 »

 Cheesy Cheesy Cheesy Cheesy Cheesy
JUPPI es geht

-----------"DANKE PAFF"-----------
Gespeichert

Nobody is perfect but Nobody is perfect
Seiten: [1]
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2007, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS