Startseite › Foren › Deutsches LiveCode-Forum › Stacks speichern in Standalones
- Dieses Thema hat 9 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahren, 6 Monaten von Klaus Major.
-
AutorBeiträge
-
-
November 2, 2020 um 17:33 Uhr #24033
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
-
Januar 16, 2021 um 19:46 Uhr #25894
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. -
Januar 16, 2021 um 19:52 Uhr #25895
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
-
Januar 16, 2021 um 21:38 Uhr #25898
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
-
Januar 18, 2021 um 22:35 Uhr #25924
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 1Egal 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
-
Januar 18, 2021 um 22:36 Uhr #25925
Wie kommt es zu der Meldung?
Ich müsste es eigentlich jetzt, so wie in deiner Anleitung haben.Danke im Voraus
Gruß
Oliver -
Januar 19, 2021 um 12:32 Uhr #25936
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. -
Januar 19, 2021 um 12:33 Uhr #25937
Ich sehe auch nix von:
on openstack if isBuildingStandalone() then exit openstack end if ...
-
März 31, 2021 um 16:18 Uhr #27430
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 -
März 31, 2021 um 20:42 Uhr #27431
Nein! 😀
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.