Function & Custom Properties

Startseite Foren Deutsches LiveCode-Forum Function & Custom Properties

Ansicht von 7 Antwort-Themen
  • Autor
    Beiträge
    • #3430
      gfz
      Teilnehmer

      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

    • #3434
      Klaus Major
      Verwalter

      Hi Georg,

      fast, so sollte es als Funktion gehen:

      on openStack
         setProgramPath
         if doesEnginePathExist() then
           ...
      end openstack

      Gruß

      Klaus

    • #3435
      Klaus Major
      Verwalter

      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

    • #3438
      gfz
      Teilnehmer

      Genial, danke Klaus!
      LG
      Georg

    • #3439
      gfz
      Teilnehmer

      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

    • #3440
      Klaus Major
      Verwalter

      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_handler

      Gruß

      Klaus

    • #3651
      gfz
      Teilnehmer

      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

    • #3653
      Klaus Major
      Verwalter

      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

Ansicht von 7 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.