Kreierte btn speichern

Startseite Foren Deutsches LiveCode-Forum Kreierte btn speichern

Schlagwörter: 

Ansicht von 15 Antwort-Themen
  • Autor
    Beiträge
    • #22927
      Oliver122
      Teilnehmer

      Hallo zusammen,

      ich habe eine neues Problem.

      Mit

      on erstellen
         if Pos = empty then
            put 0 into oben
            put 0 into x
            repeat with y = 10085 down to 140 step - 45
               put y & return after Pos
            end repeat
            sort lines of Pos numeric
            speichern
            erstellen2
         else
            erstellen2
         end if
      end erstellen
      
      on erstellen2
         add 1 to x 
            put line 1 of Pos into oben
            delete line 1 of Pos
            herstellen
         end erstellen2
      
      on herstellen
         lock screen
         create grp ("gruppe."&x) in grp "scrollArea"
         create  btn "Art" in grp ("gruppe."&x)  of grp "scrollArea"
         create btn "Löschen" in grp ("gruppe."&x) of grp "scrollArea"
         put "global z, Pos, Pos2" & CR &  "on mouseUp" & CR & "put the top of the owner of me into Pos2"  & CR & "put the short name of the owner of me into z" & CR & "loeschen" & CR & "end mouseUp" into tSkript 
         set the script of btn "Löschen" of grp  ("gruppe."&x)  to tSkript 
         put "on mouseUp" & CR & "öffnen" & CR & "end mouseUp" into tSkript2
         set the script of btn "Art" of grp ("gruppe."&x) to tSkript2
         set the width of btn "Art" of grp ("gruppe."&x) to 100
         set the height of btn "Art" of grp ("gruppe."&x) to 40
         set the left of btn "Art" of grp ("gruppe."&x) to 15
         set the width of btn "Löschen" of grp ("gruppe."&x) to 100
         set the height of btn "Löschen" of grp ("gruppe."&x) to 40
         set the left of btn "Löschen" of grp ("gruppe."&x) to 121
         set the left of grp ("gruppe."&x) to 15
         set the top of grp ("gruppe."&x) to oben
         set the style of btn "Löschen" of grp ("gruppe."&x) to roundRect
         set the backgroundcolor of btn "Löschen" of grp ("gruppe."&x) to red
         set the style of btn "Art" of grp ("gruppe."&x) to roundRect
         set the backgroundcolor of btn "Art" of grp ("gruppe."&x) to green
         //put empty into ("vari"&x)
         namegeben
         unlock screen
      end herstellen

      werden alle btn jetzt fehlerfrei erstellt. Das neue Problem tritt aber in der Standalone Version auf.
      Jeder normale btn ist, sobald er, beim programmieren eingerichtet wird, immer da.
      Das Speichern von Daten, in Feldern ist auch kein Problem, aber die kreierten btn über den create btn
      sind weg, sobald das Programm geschlossen wird.

      Wie kann man die grp speichern und laden?

      Könnt ihr mir helfen?

    • #22945
      Klaus Major
      Verwalter

      Hi Oliver,

      hier gibt es wohl nur zwei Möglichkeiten:
      1. Kopiere alles in einen neuen und unsichtbaren Stack und speichere diesen an einem Ort, wo Du Schreibrechte hast wie z.B.:
      specialfolderpath("preferences")
      specialfolderpath("documents")

      Dann beim Start Deiner App prüfen, ob es dort schon einen gespeicherten Stack gibt.
      Wenn ja, diesen unsichtbar öffnen (go invisible stack xyz) und alles Benötigte wieder in Deinen Runtimestack zurückkopieren.

      Wenn nicht:

      ...
      put specialfolderpath("preferences") & "/karlheinz.wasauchimmer" into tDateiname
      if there is a file tDateiname then
        go invisible stack tDateiname
        ## Nun Deine Objekte zurück kopieren...
      else
        create invisible stack "deinedaten"
        set the filename of stack "deinedaten" to tDateiname
        save stack "deinedaten"
      end if
      ...

      2. Die SPLASH SCREEN Technik:
      Der eigentliche Stack wird separat Deiner Runtime hinzugefügt über -> Copy files
      und die Runtime ist nur ein kleiner Stack, der besagten Stack zunächst in einen der obengenannten Ordner kopiert, öffnet und dann auch später wieder speichert.

      Gruß

      Klaus

    • #23063
      Oliver122
      Teilnehmer

      Hallo Klaus,

      danke für deine Hilfe. Probiere das nachher mal aus.

    • #23424
      Oliver122
      Teilnehmer

      Hallo zusammen,

      um das ganze zu vereinfachen, habe ich ein kleines Testprogramm gebaut. Dort kann man über einen create Button, einen anderen erstellen und ihn dann speichern.

      Ich bekomme es aber nicht hin.

      gespeichert wird mit folgendem code:

      on mouseUp
         if there is a folder (specialFolderPath("documents")&"/speicherdatenhaus/hallo") then
            hall
       else
         create folder (specialFolderPath("documents")&"/speicherdatenhaus/hallo")
         hall
         end if
      end mouseUp
      
      on hall
         if there is not a stack "skard" then
            create invisible stack "skard"
            end if
            copy this card to  stack "skard"
            save  the  stack "skard" as url "file:"&specialFolderPath("documents")&"/speicherdatenhaus/hallo/ttest.livecode"
         end hall

      geladen mit:

      on openStack
         if the environment is "mobile" then
            put specialFolderPath("engine") into programmPfad
         else
            put the filename of this Stack into programmPfad
            set the itemDelimiter to "/"
            delete the last item of programmPfad
         end if
         if there is a file specialFolderPath("documents")&"/speicherdatenhaus/hallo/ttest.livecode" then
         go invisible stack "skard"
         copy stack "skard" url ("file:"&specialFolderPath("documents")&"/speicherdatenhaus/hallo/ttest.livecode") to stack "Untiteled1"
         end if
      end openStack

      Wenn der Stack geöffnet wird, ist der Button, in der Standaloneversion aber wieder weg.

      Könnt ihr mir bitte nochmal weiterhelfen?

      Danke im Voraus.

    • #23425
      Klaus Major
      Verwalter

      Da ist Einiges im Argen...

      on mouseUp
         ## Tipparbeit sparen!
         put  (specialFolderPath("documents") & "/speicherdatenhaus/hallo") into tOrdner
         if there is NOT a folder tOrdner then
            create folder tOrdner
         end if
         hall
      end mouseUp
      
      on hall
        ...
      end hall
      ## Siehe unten...
      
      on openStack
         ## Dieser specialfolderpath funtioniert sowohl in der IDE*** als auch in der Standalone, Platform egal!
         ## *** Dort zeigt er auf den Ordner, in dem der aktuelle Stack liegt!
         ## Aber er wird hier ja gar nicht benutzt?
         put specialFolderPath("resources") into programmPfad
         
         
         ## Hier benötigen wir den DATEINAMEN, da LC nicht weiß, daß Dein Stack eigentlich  "skard" heisst.
         put specialFolderPath("documents") & "/speicherdatenhaus/hallo/ttest.livecode" into tStack
         if there is a file tStack then
            go invisible stack tStack
            
            ## Das geht nicht, wir können keinen Stack in einen anderen kopieren!
            ## Was genau möchtest Du machen? Eine Karte aus dem Stack kopieren vielleicht?
            ## copy stack "skard" tStack to stack "Untiteled1" ???
         end if
      end openStack
    • #23426
      Klaus Major
      Verwalter

      Auf den zweiten Blick:

      on hall
         ## Ich denke, das müsste so gemeint sein, oder?
         put specialFolderPath("documents") & "/speicherdatenhaus/hallo/ttest.livecode" into tStackAufPlatte
         
         ## Wenn wir zu einem anderen Stack gehen, sicht- oder unsichtbar, 
         ## ist THIS Stack ein anderer, als Du jetzt denkst! :-)
         ## Daher merken wir uns, woher wir kommen:
         put the short name of this stack into tOldStack
         
         ## Stack schon mal gespeichert, also DEN auch öffnen:
         if there is a file tStackAufPlatte then
            go invisible stack tStackAufPlatte
         else
      
            ## Noch nie gespeichert, also Stack erstellen:
            create invisible stack "skard"
            
            ## So können wir einfach später SAVE schreiben:
            set the filename of stack "skard" to tStackAufPlatte
         end if
         
         ## FOCUS für THIS wieder herstellen:
         set the defaultstack to tOldStack
         copy this card to stack "skard"
         save stack "skard"
      end hall
    • #23438
      Oliver122
      Teilnehmer

      Hallo Klaus,

      danke für deine Hilfe.
      Zu der Frage was ich machen möchte:

      Es geht darum, dass die über den "create" btn erstellten button, in der standalone Version gespeichert werden.
      Diese verschwinden nämlich immer, wenn das Programm geschlossen wird.

      Wenn es dazu nötig ist eine card zu kopieren, dann ist das wohl der richtige Weg, aber bisher klappt es nicht.
      Wenn ich nach dem Erstellen auf den meinen save btn Drücke, wird auch eine Datei ttest.livecode erstellt.
      Wenn ich dann das Programm schließe und wieder öffne, ist der, über den "create" btn erstellte button, wieder verschwunden. Aber genau der soll ja gespeichert werden.

    • #23466
      Klaus Major
      Verwalter

      Hi Oliver,

      Zu der Frage was ich machen möchte:
      Es geht darum, dass die über den "create" btn erstellten button, in der standalone Version gespeichert werden. Diese verschwinden nämlich immer, wenn das Programm geschlossen wird.

      soweit ist mir das schon klar, aber von selber spazieren die Buttons im Stack "skard" nicht wieder in Deinen Runtime Stack, das meine ich, Du musst also etwas dafür tun.

      Du musst also die Karte aus dem Stack "skard" wieder in deinen Runtime Stack zurückkopieren!
      Wie heisst denn Dein Runtime Stack?

      Und hast Du Deine Karten auch benannt?
      Es ist immer einfacher mit benannten Objekten zu arbeiten!

      So müsste das vom Prinzip her aussehen:

      on openStack
         ## Dieser specialfolderpath funtioniert sowohl in der IDE*** als auch in der Standalone, Platform egal!
         ## *** Dort zeigt er auf den Ordner, in dem der aktuelle Stack liegt!
         ## Aber er wird hier ja gar nicht benutzt?
         put specialFolderPath("resources") into programmPfad
         
         ## Hier benötigen wir den DATEINAMEN, da LC nicht weiß, daß Dein Stack eigentlich  "skard" heisst.
         ## Name des Stacks <> Dateiname des Stacks auf Platte
         put specialFolderPath("documents") & "/speicherdatenhaus/hallo/ttest.livecode" into tStack
         if there is a file tStack then
            go invisible stack tStack
            
            ## Das geht nicht, wir können keinen Stack in einen anderen kopieren!
            ## Was genau möchtest Du machen? Eine Karte aus dem Stack kopieren vielleicht?
            copy CARD "name der kopierten Karte" OF stack tStack to stack "Name Deines Runtime Stacks hier!"    
         end if
      end openStack
    • #23738
      Oliver122
      Teilnehmer

      Hallo Klaus,

      irgendwie komme ich nicht weiter.
      Ich habe dir das Speichertest-Programm mal per Mail geschickt.

      Vielleicht komme ich ja so weiter.
      Ich wäre dir wirklich sehr dankbar, wenn du dir das mal anschaust.

      Danke im Voraus.

    • #23779
      Tim K
      Teilnehmer

      Hallo zusammen,

      ich wäre sehr dankbar, wenn eine Lösung oder ein Hinweis auch hier gepostet werden könnte. Ich kämpfe aktuell mit dem gleichen (oder sehr ähnlichen) Problem:

      Das Anlegen eines Stacks im Documents-Ordner funktioniert ebenso wie das Kopieren der zu speichernden Elemente dorthin. Was nicht funktioniert, ist das Zurückkopieren der Elemente in den Runtime-Stack, wenn die App wieder geöffnet wird. In Livecode und als .exe funktioniert alles, nur unter Android geht es nicht.

      Danke und schönen Gruß
      Tim

    • #23780
      Klaus Major
      Verwalter

      Hi Tim,

      das wird an der Tatsache scheitern, daß auf der mobilen Platform immer nur EIN Stack zu selben Zeit geöffnet werden kann! Für Mobil empfehle ich eher die SPLASH-Screen Methode.

      Da ich selber kein Handy o.ä. besitze, beziehen sich meine Vorschläge immer auf Desktop Anwendungen, wenn der Fragesteller nicht explizit MOBIL erwähnt.

      Gruß

      Klaus

    • #23781
      Tim K
      Teilnehmer

      Vielen Dank für den Hinweis, Klaus. Gibt es dazu eine Anleitung? Ich habe nur diese gefunden:

      http://lessons.livecode.com/m/4069/l/1276854-how-do-i-add-a-splash-screen-to-my-android-app

      Das hat bei mir zunächst auch nicht funktioniert. Außerdem ist der "Resources"-Ordner soweit ich recherchiert habe, auch nur Read-Only und dann zum Speichern nicht geeignet.

    • #23959
      Klaus Major
      Verwalter

      Hi Tim,

      tut mir leid, habe Deinen Post erst heute entdeckt und freigeschaltet.

      Die LC Lektion hat mit meinem Hinweis nichts zu tun, da bedeutet SPLASH Screen
      etwas ganz Anderes! Ich werde versuchen am Wochenende eine Anleitung zu schreiben.

      Gruß

      Klaus

    • #24037
      Klaus Major
      Verwalter

      Wer es noch nicht gesehen hat, mein Tutorial ist jetzt online:
      https://www.livecode-blog.de/forums/topic/stacks-speichern-in-standalones/

    • #26494
      Oliver122
      Teilnehmer

      Hi Klaus,

      hat ein bisschen gedauert. Jetzt ist das Problem endlich gelöst.
      Danke für deine Hilfe.

      Gruß Oliver

    • #26495
      Klaus Major
      Verwalter

      Super! 🙂

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