Script-Problem

Hallo Forum,
vergangene Woche habe ich mit Maxillas Hilfe (danke nochmal!) ein Script gebastelt, was nach einem bestimmten (vorhandenen) Thema im View sucht.
Hierbei stelle ich ein erstaunliches Problem fest:
Wenn ich das Script in ein neues Projekt einbaue, funktioniert es prima. Baue ich es in ein bestehendes Projekt ein, verweigert es die Mitarbeit.
Ich erhalte immer die Fehlermeldung "Objekt Nil kann die Anforderung getFTab nicht erkennen". Das Script bleibt dementsprechend an folgender Stelle hängen:
'finde.adresse
theView = av.getActiveDoc
theTheme = theView.FindTheme("adressen.shp".AsString)
theFTab = theTheme.getFTab

Weitergehen sollte es eigentlich mit:
eingabefelder = {"Ort", "Strasse", "Hausnummer"}
standardwerte = {"","",""}

key = MsgBox.MultiInput( "Welche Adresse suchen Sie?", "Adressensuche", eingabefelder, standardwerte)
strOrt = key.Get(0)
strStrasse = key.Get(1)
strHausnummer = key.Get(2)

strQuery = "([Ort] = " + strOrt.Quote + ") and ([Strasse] = " + strStrasse.Quote + ") and ([Hausnummer] = " + strHausnummer + ")"

theFTab.Query (strQuery,theFTab.GetSelection, #VTAB_SELTYPE_NEW)

av.GetProject.SetModified(true)
theView = av.getActiveDoc
r = Rect.MakeEmpty

if (theTheme.CanSelect) then
r = r.UnionWith(theTheme.GetSelectedExtent)
end

if (r.IsEmpty) then
msgbox.info("Leider konnte die angegebene Adresse nicht gefunden werden. Achten Sie auf die richtige Schreibweise! (Benutzen Sie Umlaute, also z.B.'ß' statt 'ss' und 'ä' statt 'ae' usw.; Schreiben Sie das Wort 'Straße' immer aus. Sind evtl. Bindestriche im Straßennamen notwendig?)","")
elseif ( r.ReturnSize = (0@0) ) then
theView.GetDisplay.PanTo(r.ReturnOrigin)
theView.GetDisplay.ZoomToScale(2000)
end


Ist Euch das schon mal vorgekommen, daß ein Script nur in neuen Projekten läuft? Kann das an der Anzahl der im View vorhandenen Themen liegen (zugegeben, es sind einige)?

Danke im Vorraus!
Maggie
Hi Maggie,

ich bin's wieder. Wenn...

theView = av.getActiveDoc
theTheme = theView.FindTheme("adressen.shp")
theFTab = theTheme.getFTab

die von dir genannte Fehlermeldung zurückgibt, dann kann das eigentlich nur bedeuten, dass ein Thema namens "adressen.shp" nicht im View ist.
Du solltest vor theFTab = theTheme.getFTab eine kleine Testabfrage einfügen, zum Beispiel:

if (theTheme = NIL) then
MsgBox.Info("Das Thema "+"adressen.shp".Quote+" konnte nicht gefunden werden...",theView.GetName)
return NIL
elseif (theTheme.is(FTheme).not) then
return NIL
end
Hallo Maxilla,
Du hast Recht, ich hatte das Thema unter den Themeneigenschaften anders benannt, daher der Fehler.
Ich werde die Abfrage einfügen.
Danke!
Maggie
Und noch etwas fällt mir auf. Die Zeilen...

elseif ( r.ReturnSize = (0@0) ) then
theView.GetDisplay.PanTo(r.ReturnOrigin)
theView.GetDisplay.ZoomToScale(2000)
end

...müsstest du wohl durch...

else
theView.GetDisplay.PanTo(r.ReturnOrigin)
theView.GetDisplay.ZoomToScale(2000)
end

...ersetzen, damit sie etwas bewirken.

Die lange MsgBox.Info mit den Scheibweise-Anmerkungen würde ich durch eine MsgBox.Report ersetzen, damit sie bei allen Bildschirmauflösungen und Schriftgraden gelesen werden kann.

Und hinter die MsgBox.MultiInput würd ich noch...

if (key.count = 0) then return NIL end

...setzen um den AvArray-Fehler abzufangen falls der Nutzer 'Abbrechen' drückt.

Gruß vom M.