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
        Administrator

          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
              Administrator

                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
                Administrator

                  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
                    Administrator

                      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
                          Administrator

                            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
                              Administrator

                                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
                                Administrator

                                  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
                                    Administrator

                                      Super! 🙂

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