Eigene Libraries einbinden

Startseite Foren Deutsches LiveCode-Forum Eigene Libraries einbinden

Schlagwörter: ,

Ansicht von 10 Antwort-Themen
  • Autor
    Beiträge
    • #2261
      Heinz
      Teilnehmer

        Hallo zusammen,
        Über Haukes Buch habe ich erstmals von LiveCode erfahren.

        Nachdem ich mich jetzt seit ein paar Monate mit LiveCode in meiner Freizeit beschäftigt habe, bin ich von den Möglichkeiten, die die Plattform liefert begeistert :-), und habe die Indy-Version zum Schnäppchen-Preis erworben.

        Nachdem ich einige kleine Apps geschrieben habe, entsteht bei mir der Wunsch immer wieder benutze Funktionen in einer Library zusammenzufassen und in verschieden Projekten zu nutzen.

        Kennst Sie einer von Euch damit aus und kann mir ein paar Tipps geben, wie ich das am besten anstelle?

        Liebe Grüße
        Heinz

      • #2265
        Klaus Major
        Administrator

          Hallo Heinz,

          das ist recht simpel! 🙂

          1. Erstelle einen Stack und benenne ihn wie du magst.
          Im Beispile benutze ich den alten bescheuerten Namen „mylib1“

          2. In sein Stack Script schreibst Du alle Deine Handler und Funktionen,
          die du als Library nutzen möchtest.

          3. Auf der Platte als Mainstack speichern.

          4. Immer wenn Du die Lib einbinden möchtest, öffnest Du diesen Stack und machst ihn zu einem Substack in Deinen neuen Projekt z.B. „new project 42“ 😎

          4. Im Stack Skript (oder Skript der ersten Karte) dieses Stacks „new project 42“ schreibst Du:

          on openstack
            ## Dein openstack Kram hier...
            start using stack "mylib1"
          end openstack

          Das wars, ab sofort stehen alle Handler und Funktionen von „mylib1“ zur allgemeinen Verfügung.

          Geht auch noch anders, aber so ist es meiner Meinung nach am verständlichsten und ist auch „offiziell“.

          Gruß

          Klaus

        • #2268
          Heinz
          Teilnehmer

            Hallo Klaus,

            danke für die schnelle Antwort 🙂
            Ich habe das gleich mal mit einem einfachen Beispiel ausprobiert.
            In der IDE funktioniert das super. Auch die Windows Standalone App funktioniert.
            Nur bei der Android App kann ich die Lib-Funktionen nicht aufrufen.
            Ich hab den Fehler mal mit Try und Catch abgefangen.
            Hier zeigt sich folgende Fehlermeldung:
            219,3,11,mylibFunction
            465,3,11

            Der Fehlercode 219 bedeutet „Function: error in function handler“
            Der Fehlercode 465 „put: error in expression“ scheint ein fFolgefehler zu sein

            Ich poste mal den einfachen Beispielcode: Irgendwo muss ich doch einen Denkfehler haben:

            AppName Test.livecode
            Script im Main Stack „Test“

            on preOpenStack
              start using Stack "C:\Users\heinr\Documents\My LiveCode\Plugins\myLib.livecodescript"
            end preOpenStack

            Im Main-Stack habe ich auf der Card einen Test-Button mitfolgendem Script angelegt:

            on mouseUp 
               try      
                  put myLibFunction() into tResult
                  answer tResult
               catch tError
                  answer tError
               end try
            end mouseUp

            Die Library ist für den Test ganz einfach aufgebaut. Es gibt nur eine Funktion die ich im Stack abgelegt habe.

            function myLibFunction
                return "myLib is up and running"
            end myLibFunction

            Hast Du eine Idee was ich falsch mache?

            Liebe Grüße
            Heinz

          • #2269
            Klaus Major
            Administrator

              Hallo Heinz,

              ich denke, Du hast meinen (ersten, pardon) Schritt 4 vergessen!
              Das Handy und wahrscheinlich auch der Simulator haben wohl keinen Zugriff auf Dein Windows Dateisystem!
              Mach den Stack zu einem SUB-Stack von Deiner Standalone, ändere diese Zeile

              on preOpenStack
                ##start using Stack "C:\Users\heinr\Documents\My LiveCode\Plugins\myLib.livecodescript"
                start using Stack "myLib"
              end preOpenStack

              dann klappt das schon 🙂

              Gruß

              Klaus

            • #2270
              Klaus Major
              Administrator

                Oh, Moment mal, Du hast einen Text-only Stack erstellt, also nicht, was ich zunächst geraten hatte.
                Das muss ich erst wieder nachlesen, sorry. 😎

              • #2275
                Heinz
                Teilnehmer

                  Hallo Klaus,
                  ich habe die Library jetzt auch mal als normalen Stack mit der Endung Livecode angelegt.
                  Den Pfad bei der Lib-Datei wegzulassen funktioniert nicht. Dann wird die Datei nicht gefunden und auch nicht geladen. Wo legst Du deine Library Dateien ab?

                  Was mir auffällt ist, dass die Lib-Datei in ProjectBrowser nicht als SubStack sondern als ganz normaler Stack angezeigt wird.

                  Das sieht dann so aus:
                  + myLib
                  + Test

                  Nach Deiner Beschreibung würde ich erwarten das der Project Browser folgende Anzeige ausgibt:
                  – Test
                  + Card 1
                  + myLib

                  Wie sieht das wenn bei Dir aus?
                  Gruß
                  Heinz

                • #2276
                  Heinz
                  Teilnehmer

                    Ups dir Darstellung des Projectbrowsers sieht man oben nicht richtig.
                    Im zweiten Fall ist Card1 und MyLib eingerückt.
                    Gruß
                    Heinz

                  • #2277
                    Klaus Major
                    Administrator

                      Hast Du Deine Lib auch als Substack von „Test“ definiert? Siehe Schritt 4.
                      Das ist eigentlich der Schlüssel!

                      Der Stack selber bleibt ja als „MyLib.livecode“ Datei auf Deiner Platte,
                      die DATEI (sic!) wird geschlossen und jetzt ist eine Kopie davon Substack von „Test“.
                      Capisce? 🙂

                      Du kannst das sogar scripten in der „savingstandalone“ Message in Skript von Stack „Test“!

                    • #2280
                      Heinz
                      Teilnehmer

                        Hallo Klaus,
                        ich stehe auf dem Schlauch.
                        In Deiner Beschreibung oben steht unter Punkt 4.
                        „Immer wenn Du die Lib einbinden möchtest, öffnest Du diesen Stack und machst ihn zu einem Substack in Deinen neuen Projekt z.B. „new project 42″ ?“
                        Das ist glaube ich mein Problem. Ich verstehe nicht wie ich den Lib-Stack zu einem SubStack machen kann, damit er bei dem Kommando start using Stack „myLib“ als Substack eingebunden wird.

                        Muss ich hierzu einen leeren Sub-Stack myLib in meinem Projekt Test anlegen und der wird dann über das Kommando „Start using Stack „myLib““ gefüllt?

                        Gruß
                        Heinz

                      • #2281
                        Klaus Major
                        Administrator

                          Nein, das geht einfacher:
                          1. öffne beide Stacks „Neues Projekt“ und „MyLib“
                          2. Ruf den Inspector für den Stack „MyLib“ auf
                          3. Dort (erser Reiter) stelle im Popup „Mainstack“ den Namen des neuen Projektes ein „Neues Projekt“.
                          4. Speichern und fertig 🙂

                        • #2282
                          Heinz
                          Teilnehmer

                            Hallo Klaus,

                            ich habe es gerade ausprobiert und es klappt 🙂
                            Wenn man weiß wie es geht ist es ganz einfach.
                            Vielen Dank!!!
                            Liebe Grüße Heinz

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