Stacks speichern in Standalones

Startseite Foren Deutsches LiveCode-Forum Stacks speichern in Standalones

Ansicht von 9 Antwort-Themen
  • Autor
    Beiträge
    • #24033
      Klaus Major
      Administrator

        Hallo Freunde der Nacht,

        ich mochte euch hier zeigen, wie man einen Stack innerhalb einer Standalone speichert, die sogenannte SPLASH-Screen Methode.

        HINWEIS:
        Dies hier hat außer dem Namen NICHTS mit den SPLASH-Screen Grafiken zu tun, die wir bei Runtimes für die mobile Platform erstellen müssen!

        Dies ist z.B. nötig, wenn der User selber Objekte erstellen kann, dann ist es mühselig, diese irgenwie anders zu speichern und später wieder einzubauen.

        Das geht alles natürlich nicht so direkt, sondern wir müssen etwas tricksen.
        Es gibt selbstverständlich ein paar Unterschiede zwischen Desktop- und mobilen Apps, die habe ich jeweils hervorgehoben.

        Und so wird’s gemacht:
        1. Erstellt den Stack, ich nenne ihn hier mal “speicherbar.livecode”, so wie immer.

        2. Dann erstellt ihr einen neuen Stack, ich nenne ihn hier “splash.livecode”.
        Der wird nur kurz angezeigt und startet als Runtime dann den eigentlichen Stack!
        Hier könnt ihr ein Logo von euch oder was auch immer anzeigen.
        Dieser Stack (“splash”) muss ein SEPARATER MAINSTACK sein!

        Desktop: Hier ist die Größe des Stacks egal.
        Mobil: Der Stack sollte genau so groß sein wie der Stack “speicherbar”.

        Aus diesem Stack erstellen wir dann später die Standalone, also dem “splash” alle “Inclusions” hinzufügen, die benötigt werden.

        3. Nun in den “Standalone Application Setting” bei “Copy files” unseren “speicherbar.livecode” Stack unserer Runtime hinzufügen!

        4. Skript der ersten Karte von “splash”, hier wird die ganze Zauberei gemacht.
        Wir kopieren unseren Stack in einen Ordner, in dem wir auch schreiben dürfen und öffnen ihn von dort!

        on openstack
         if the environment = "mobile" then
          # Mobile:
          put specialfolderpath("documents") into tZielordner
          # Hier ist KEIN Unterordner nötig!
         else	
          ## Desktop:
          ## Windows
          if the platform contains "Win" then
            put specialfolderpath("support") into tZielordner
          else
           ## Mac:   
           put specialfolderpath("preferences") into tZielordner
          end if
        
          ## Ein eigener Unterordner für unsere App ist immer guter Stil, ist aber optional.
          put "/meine app" after tZielordner
          if there is not a folder tZielordner then
           create folder tZielordner
          end if
         end if
        	
         # Nun unseren Stack dorthin kopieren, falls nötig:
         put tZielordner & "/speicherbar.livecode" into tZielDatei
         
         # Alles, was wir in den "Standalone Application Settings" bei "Copy files" 
         # unserer Runtime hinzufügen, finden wir in -> specialfolderpath("resources")
         put specialfolderpath("resources") & "/speicherbar.livecode" into tQuellDatei
        
         # Allererster Appstart:
         if there is NOT a file tZielDatei then
          put url("binfile:" & tQuellDatei) into url("binfile:" & tZielDatei)
         end if
        
         # Bei Bedarf können wir den SPLASH Stack noch eine kurze Zeit anzeigen, 
         # ist aber auch optional:
         wait 2 secs
        
         # GANZ WICHTIG!
         # Alle Externals und "Inclusions" sind ja dem SPLASH Stack zugeordnet, 
         # daher müssen wir unbedingt:
         start using stack "splash"
         # damit unser "speicherbar" Stack diese auch nutzen kann!
        
         # Jetzt können wir endlich unseren eigentlichen und speicherbaren Stack öffnen
         hide stack "splash"
         go stack tZieldatei
        end openstack

        5. Nun die Runtime von “splash.livecode” erstellen und fertig.

        Das wars im Prinzip, nun können wir den Stack “speicherbar” speichern, wenn es nötig ist:

        ...
        save this stack
        ...

        Vielleicht am Besten in eurem “Quit” Knopf:

        ...
        save this stack
        ## "speicherbar" ist ja NICHT die eigentliche Standalone, daher sollten wir einen "Beenden"
        ## Knopf zur Verfügung stellen
        quit
        ...

        Oder dem User einen “Speichern” Button oder Menüpunkt bereitstellen, wie auch immer ihr das möchtet.

        Hinweis:
        Wenn wir eine SQLite Datenbank-Datei in der Runtime benutzen wollen,müssen wir genau so
        vorgehen und die Datei zuerst in einen der oben genannten Ordner kopieren und von dort öffnen!

        Gruß

        Klaus

      • #25894
        Oliver122
        Teilnehmer

          Hallo Klaus,

          ich habe es genau so versucht und noch alles mögliche andere. Ist es für dich ok, wenn ich die das Programm schicke, du änderst es so dass es funktioniert und ich versuche es dann zu verstehen?
          Ich bekomme es leider nicht hin und will aber auch nicht alles hinschmeißen, wegen dieses Problems.

        • #25895
          Klaus Major
          Administrator

            Auf welcher Platform hast Du es probiert? Ich könnte es nur auf dem Mac ausprobieren.
            Wenn das OK ist, schick mir Deine beiden Stacks (splash und speicherbar) und ich schaue mal rein.

            -> klaus AT major-k.de

          • #25898
            Oliver122
            Teilnehmer

              Hallo Klaus,

              ich habe es für Windows gemacht und habe auch kein mac.
              Es war ursprünglich so wie du es beschrieben hast, aber jetzt ist es anders, weil ich andere Sachen probiert habe.

              Ergebnis ist aber immer das gleiche. In der standhalten Version ist alles weg, sobald das Programm geschlossen wird.

              Danke für deine Hilfe. Ich schicke dir gleich die Mail

            • #25924
              Oliver122
              Teilnehmer

                Hallo Klaus,

                ich kam noch nicht dazu es richtig auszuprobieren. Ich habe aber immer eine Fehlermeldung, die ich nicht verstehe. Auch jetzt wo der splash stack eigenständig ist.

                Die Fehlermeldung:
                stack “splash”: execution error at line 20 (Handler: error in statement), char 1

                Egal ob ich es so schreiber:

                on openStack
                 
                   put the filename of this Stack into tZielordner
                   set the itemDelimiter to "/"
                   delete the last item of tZielordner
                   
                   put "/Haushaltsbuch" after tZielordner
                   if there is not a folder tZielordner then
                      create folder tZielordner
                   end if
                   put tZielordner & "/speicherbar.livecode" into tZieldatei
                   put specialfolderpath("resorces") & "/speicherbar.livecode" into tQuellDatei
                   if there is not a file tZieldatei then
                      put url("binfile:" & tQuellDatei) into url("binfile:" & tZieldatei)
                   end if
                   wait 2 secs
                   start using stack "splash"
                   hide stack "splash"
                   go stack  tZieldatei
                end openStack

                oder so:

                on openStack
                   put specialfolderpath("support") into tZielordner 
                   put "/Haushaltsbuch" after tZielordner
                   if there is not a folder tZielordner then
                      create folder tZielordner
                   end if
                   put tZielordner & "/speicherbar.livecode" into tZieldatei
                   put specialfolderpath("resorces") & "/speicherbar.livecode" into tQuellDatei
                   if there is not a file tZieldatei then
                      put url("binfile:" & tQuellDatei) into url("binfile:" & tZieldatei)
                   end if
                   wait 2 secs
                   start using stack "splash"
                   hide stack "splash"
                   go stack  tZieldatei
                end openStack
              • #25925
                Oliver122
                Teilnehmer

                  Wie kommt es zu der Meldung?
                  Ich müsste es eigentlich jetzt, so wie in deiner Anleitung haben.

                  Danke im Voraus

                  Gruß
                  Oliver

                • #25936
                  Klaus Major
                  Administrator

                    Für welche Platform ist welches Skript gedacht?
                    specialfolderpath(“resources”) funktioniert auch in der IDE!

                    Falls das für die Runtime sein soll, das wird nicht klappen, da wir hier ja schon im PROGRAMME Ordner sind und dort keine Schreibrechte haben! Zeile 20 ist -> end opencard?

                    on openStack
                       put the filename of this Stack into tZielordner
                       set the itemDelimiter to "/"
                       delete the last item of tZielordner
                    ...

                    Das ist hier für Windows, korrekt?
                    Bitte immer alle benötigten Infos mitteilen!

                    on openStack
                       put specialfolderpath("support") into tZielordner 
                       put "/Haushaltsbuch" after tZielordner
                       if there is not a folder tZielordner then
                    ...

                    Du hast “speicherbar.livecode” doch der Runtime wie beschrieben hinzugefügt, oder?
                    Zeig doch bitte mal die Ordnerstruktur Deiner Runtime.

                  • #25937
                    Klaus Major
                    Administrator

                      Ich sehe auch nix von:

                      on openstack
                        if isBuildingStandalone() then
                           exit openstack
                        end if
                      ...
                    • #27430
                      Torsten
                      Teilnehmer

                        Hi Klaus,

                        mir ist (weil ich selbst gerade den Ansatz ausprobiere) ein Typo aufgefallen:

                        put specialfolderpath("resources") & "/speicherbar.livecode" int tQuellDatei

                        int => into

                        Kannst Du das noch korrigieren?

                        LG
                        Torsten

                      • #27431
                        Klaus Major
                        Administrator

                          Nein! 😀

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