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
        Administrator

          Hi Georg,

          fast, so sollte es als Funktion gehen:

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

          Gruß

          Klaus

        • #3435
          Klaus Major
          Administrator

            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
                Administrator

                  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
                    Administrator

                      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.