Startseite › Foren › Deutsches LiveCode-Forum › Function & Custom Properties
- Dieses Thema hat 7 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahren von Klaus Major.
-
AutorBeiträge
-
-
Dezember 29, 2017 um 21:28 Uhr #3430
Liebe Livecoder!
Wieder mal mit meinem Latein am Ende – oder hat LC ein Eigenleben, von dem ich nichts verstehe!?
Folgendes Problem:
Beim Starten meines Stacks möchte ich den Programmpfad als customProperty im aktuellen Stack speichern. Anschließend prüfe ich, ob diese angelegt wurde und abhängig davon möchte ich einige spezielle Ordnerpfade ebenfalls als customProperties des Stack abspeichern.
Hier mal der Code:on openStack setProgramPath doesEnginePathExist end openStack on closeStack quit end closeStack on setProgramPath local tPP if the environment is "mobile" then put specialFolderPath("engine") into tPP else put the filename of this stack into tPP set the itemDelimiter to "/" delete the last item of tPP end if set the EnginePath of this stack to tPP end setProgramPath command doesEnginePathExist local tCustomKeys, tResult put false into tResult put the customKeys of this stack into tCustomKeys if "EnginePath" is among the lines of tCustomKeys then answer "EnginePath wurde unter den Schlüsseln gefunden!" put true into tResult end if //return tResult end doesEnginePathExist
Das funktioniert und ich erhalte die Nachricht „EnginePath wurde unter den Schlüsseln gefunden!“ – aber möchte ich aus der Routine „doesEnginePathExist“ eine Funktion machen, klappt es nicht.
Hier die geänderten Codeteile:
on openStack setProgramPath if (doesEnginePathExist) then answer "gefunden" else answer "nicht gefunden" end if end openStack
function doesEnginePathExist local tCustomKeys, tResult put false into tResult put the customKeys of this stack into tCustomKeys if "EnginePath" is among the lines of tCustomKeys then answer "EnginePath wurde unter den Schlüsseln gefunden!" put true into tResult end if return tResult end doesEnginePathExist
Beim Start erhalte ich hier die Meldung „nicht gefunden“!
Grüße,
Georg -
Dezember 29, 2017 um 21:34 Uhr #3434
Hi Georg,
fast, so sollte es als Funktion gehen:
on openStack setProgramPath if doesEnginePathExist() then ... end openstack
Gruß
Klaus
-
Dezember 29, 2017 um 22:03 Uhr #3435
Aber mal was Anderes…
on setProgramPath local tPP if the environment is "mobile" then put specialFolderPath("engine") into tPP else put the filename of this stack into tPP set the itemDelimiter to "/" delete the last item of tPP end if set the EnginePath of this stack to tPP end setProgramPath
Du weisst, daß Du im ENGINE Folder nicht schreiben darfst?
Möchtest Du nicht lieber den Ornder mit den Resourcen speichern?
Ich vermute, daß Du relativ dazu Deine weiteren Ordnerpfade ableiten willst?Falls ja, können wir das aber sowas von kürzen 🙂
on setProgramPath set the EnginePath of this stack to specialFolderPath("resources") end setProgramPath
In der IDE zeigt dieser specialfolderpath auf den Ordner,
in dem sich der aktuelle Stack befindet, klappt also universell.Falls nein, dann habe ich nichts gesagt 😉
Ach doch, ein kleiner Tip: „Mister Boole is your friend!“
Abgesehen von ANSWER geht das hier auch etwas kompakter:function doesEnginePathExist local tCustomKeys put the customKeys of this stack into tCustomKeys return ("EnginePath" is among the lines of tCustomKeys) end doesEnginePathExist
Gruß
Klaus
-
Dezember 30, 2017 um 10:35 Uhr #3438
Genial, danke Klaus!
LG
Georg -
Dezember 30, 2017 um 12:27 Uhr #3439
Wären diese Scripts in einem Script-Only-Stack besser aufgehoben? Und wenn ja, wie würde ich diese dann in meinem Projekt einbinden in einem Stack mit UI?
Noch eine andere Frage: Wann wäre es sinnvoll eine Routine als „command“ und wann als „message-handler“ – also mit „on irgendwas“ zu definieren?
LG an die Experten
Georg -
Dezember 30, 2017 um 12:59 Uhr #3440
Hi Georg,
zu Skript-only Stacks kann ich mangels Erfahrung nichts sagen.
Es spricht aber nichts dagegen, diese Handler und Funktionen ins Skript Deines MAIN-Stacks zu packen.Livecode empfiehlt, „command“ bei eigenen Handlern zu benutzen, im Gegensatz zu den eingebauten
Handlern, also:
on mouseup
aber:
command mein_geiler_handlerGruß
Klaus
-
Januar 14, 2018 um 21:14 Uhr #3651
Hallo Klaus,
danke für deine Antworten.Noch ne Frage an alle Livecoder
Wohin zeigt specialFolderPath(„resources“) in der Standalone App unter Windows? Und Pfadangaben relativ dazu werden mit „/…“ oder mit „\…“ angehängt?
liebe Grüße,
Georg -
Januar 15, 2018 um 00:09 Uhr #3653
HI georg,
Wohin zeigt specialFolderPath(„resources“) in der Standalone App unter Windows?
muss ich raten, bin Mac User 😉
Auf jeden Fall irgendein Unterordner (Resources?) des Ordners, in dem sich die EXE befindet.Und Pfadangaben relativ dazu werden mit „/…“ oder mit „\…“ angehängt?
Intern in LC IMMER mit Slash /!
Einzige Ausnahme wäre bei SHELL Befehlen unter Windows, sonst immer der SLASH!
Hab ich schon erwähnt IMMER? 😀Gruß
Klaus
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.