Stacks speichern in Standalones

Startseite Foren Deutsches LiveCode-Forum Stacks speichern in Standalones

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

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      Nein! 😀

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