Scroller für Datagrid erstellen

Startseite Foren Deutsches LiveCode-Forum Scroller für Datagrid erstellen

  • Dieses Thema hat 17 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahren von mario.
Ansicht von 17 Antwort-Themen
  • Autor
    Beiträge
    • #2103
      mario
      Teilnehmer

        Hallo ihr fleißigen Programmierer,

        ich brauche wieder einmal eure Hilfe und bin echt froh, dass es dieses Forum gibt, denn ansonsten würde ich die App wahrscheinlich nie so hinbekommen, wie ich es gerne hätte.
        Ich möchte noch einmal vorausschicken, dass ich vorher mehrere Stunden im Dr. Google recherchiert und auch schon mehrmals das Skript geändert habe – leider ohne Erfolg…
        Also nun zu meiner “allgemeinen” Frage:
        Wo muss man für ein Datagrid den Scroller definieren? Im Card-Skript, im Behavior Script des Data Grids oder einfach im Skript der Group?

        Ich programmiere in LC 8.1.6 und dafür habe ich kaum Antworten im Internet gefunden. Da werden hauptsächlich ältere Versionen beschrieben…

        Liebe Grüße
        Mario

      • #2105
        Klaus Major
        Administrator

          Hi Mario,

          das sollte ins Kartenskript, so kannst Du z.B. direkt “on opencard” den Scroller erstellen und bei “on closecard” wieder löschen.

          Gruß

          Klaus

        • #2107
          mario
          Teilnehmer

            Hallo Klaus,

            danke für die schnelle Antwort. Ich habe jetzt dieses Skrip erstellt/aus dem Internet übernommen, aber es tut sich gar nichts…

            /*on openCard
               
               local tScrollerRect, tContentRect
               
               // Only create a scroller on a mobile device
               if environment() is not "mobile" then exit openCard
               
               // Set the area of the scroller
               put the rect of group "dgRouten" into tScrollerRect
               
               // Set the area of the content to be scrolled
               put 0,0,(the formattedWidth of group "dgRouten"),(the formattedHeight of group "dgRouten") into tContentRect
               
               // Create the scroller control
               mobileControlCreate "scroller", "loremScroll"
               put the result into sScrollerID
               
               // Set the properties of the scroller
               mobileControlSet "loremScroll", "rect", tScrollerRect
               mobileControlSet "loremScroll", "contentRect", tContentRect
               mobileControlSet "loremScroll", "visible", true
               mobileControlSet "loremScroll", "scrollingEnabled", true
               mobileControlSet "loremScroll", "vIndicator", true
               mobileControlSet "loremScroll", "vscroll", 0
               
            end openCard
            
            on closeCard
               // Delete the scroller
               if environment() is not "mobile" then exit closeCard
               mobileControlDelete sScrollerID
             end closeCard
            
            on scrollerDidScroll pHScroll, pVScroll
               // When the user scrolls move the displayed content
               set the DGvScroll of group "dgRouten" to pVScroll
            end scrollerDidScroll*/
            
            ########################
            
            on openCard
               scroller_create
            end openCard
            
            on closeCard
               scroller_delete
            end closeCard
            
            on scroller_create
               local tScrollerRect, tContentRect
               set the vScroll of grp "listA" to 0
               ##Only create a scroller on a mobile device
               if the environment is not "mobile" then exit scroller_create
               ##Set the area of the scroller
               put the rect of group "dgRouten" into tScrollerRect
               ##Set the area of the content to be scrolled
               put 0,0,(the dgFormattedWidth of group "dgRouten"),(the dgFormattedHeight of group "dgRouten") into tContentRect
               ##Create the scroller control
               mobileControlCreate "scroller", "listScroll"
               put the result into sScrollerID
               ##Set the properties of the scroller
               mobileControlSet "listScroll", "rect",tScrollerRect
               mobileControlSet "listScroll", "contentRect",tContentRect
               mobileControlSet "listScroll", "visible",true
               mobileControlSet "listScroll", "scrollingEnabled",true
               mobileControlSet "listScroll", "vIndicator",true
               mobileControlSet "listScroll", "vscroll", 0
            end scroller_create
            
            on scroller_delete
               if the environment is not "mobile" then exit scroller_delete
               mobileControlDelete sScrollerID
            end scroller_delete
            
            on scrollerDidScroll pHScroll, pVScroll
               set the DGvScroll of group "dgRouten" to pVScroll
               set the DGSelectedLine of group "dgRouten" to empty
            end scrollerDidScroll
            
            on mouseRelease
               set the dgHilitedLines of group "dgRouten" to empty
            end mouseRelease
            

            Für mich scheint es, als ob der Scroller gar nicht erst erstellt wird…

            Danke für eure Hilfe!

            Liebe Grüße
            Mario

          • #2109
            mario
            Teilnehmer

              sry – das war das falsche Skript in der Zwischenablage 🙁

              on openCard
                 scroller_create
              end openCard
              
              on closeCard
                 scroller_delete
              end closeCard
              
              on scroller_create
                 local tScrollerRect, tContentRect
                 set the vScroll of grp "listA" to 0
                 ##Only create a scroller on a mobile device
                 if the environment is not "mobile" then exit scroller_create
                 ##Set the area of the scroller
                 put the rect of group "dgRouten" into tScrollerRect
                 ##Set the area of the content to be scrolled
                 put 0,0,(the dgFormattedWidth of group "dgRouten"),(the dgFormattedHeight of group "dgRouten") into tContentRect
                 ##Create the scroller control
                 mobileControlCreate "scroller", "listScroll"
                 put the result into sScrollerID
                 ##Set the properties of the scroller
                 mobileControlSet "listScroll", "rect",tScrollerRect
                 mobileControlSet "listScroll", "contentRect",tContentRect
                 mobileControlSet "listScroll", "visible",true
                 mobileControlSet "listScroll", "scrollingEnabled",true
                 mobileControlSet "listScroll", "vIndicator",true
                 mobileControlSet "listScroll", "vscroll", 0
              end scroller_create
              
              on scroller_delete
                 if the environment is not "mobile" then exit scroller_delete
                 mobileControlDelete sScrollerID
              end scroller_delete
              
              on scrollerDidScroll pHScroll, pVScroll
                 set the DGvScroll of group "dgRouten" to pVScroll
                 set the DGSelectedLine of group "dgRouten" to empty
              end scrollerDidScroll
              
              on mouseRelease
                 set the dgHilitedLines of group "dgRouten" to empty
              end mouseRelease
            • #2111
              Klaus Major
              Administrator

                Und so:

                local tScrollerRect, tContentRect
                
                on opencard
                ...

                ? 🙂

              • #2113
                Klaus Major
                Administrator

                  Und so:

                  local tScrollerRect, tContentRect
                  
                  on opencard
                  ...

                  ? 🙂

                  Also die lokalen Variablen OBEN im Skript deklarieren, damit sie in jedem Handler verfügbar ist!

                • #2115
                  mario
                  Teilnehmer

                    nein, geht auch dann nicht…

                  • #2117
                    Klaus Major
                    Administrator

                      Dann muss ich erst mal mangels Testmöglichkeit passen.

                    • #2124
                      Tim K
                      Teilnehmer

                        Hi Mario,

                        ich bin Anfänger, daher kann ich nicht garantieren, dass das stimmt, aber meine scrollende Gruppe funktioniert. Ich glaube bei Dir fehlt:

                        set the layerMode of group "dgRouten" to "scrolling"

                        Laut Doku eine Einstellung, die erforderlich ist, damit die zu Beginn nicht sichtbaren Inhalte der Gruppe auch gerendert und gecached werden. Ansonsten wird wohl nur der sichtbare Teil gerendert, der Rest nicht und es gäbe nichts zu scrollen.

                        Damit die Einstellung auch Auswirkungen hat, muss demnach außerdem der compositorType des Stacks gesetzt werden. Hier das ganze Skript zu meiner Gruppe, das ich aus dem englischen Forum kopiert habe:

                           
                        set the layerMode of group "dgRouten" to "scrolling"
                        if the platform is "iphone" then
                              set the compositorType of this stack to "opengl"
                           else
                              set the compositorType of this stack to "software"
                           end if
                           set the compositorTileSize of this stack to 32
                           set the compositorCacheLimit of this stack to (16 * 1024 * 1024)
                           set the acceleratedRendering of this stack to true

                        Das Skript steht bei mir im preOpenStack. Dann müsste natürlich noch die Card ergänzt werden, auf der die Gruppe ist.

                        Schönen Gruß
                        Tim

                      • #2134
                        mario
                        Teilnehmer

                          Hallo Tim,

                          danke, jetzt wird der Scroller erstellt!
                          Allerdings habe ich noch 2 Probleme:
                          1. Der Hintergrund der Card wird im DG noch einmal neu erstellt. Kann man das irgendwie deaktivieren?
                          2. Das DG scrollt nicht. Die Felder gehen über das DG hinaus, aber ich komme dann nicht nach unten zu ihnen hin. Der Scroller bewegt sich aber. Was muss ich denn noch festlegen?

                          In welcher Doku liest du denn immer nach? Ich habe schon so viele Foren durch, werde aber nur selten fündig…

                          Liebe Grüße
                          Mario

                        • #2136
                          Klaus Major
                          Administrator

                            Hi Mario,

                            hier gibt es immer viel Info:
                            http://forums.livecode.com

                            Aber was genau meinst Du bei 1. mit “Hintergrund neu erstellen”?

                            Gruß

                            Klaus

                          • #2138
                            mario
                            Teilnehmer

                              Ich habe einen Hintergrund für die Card festgelegt und dieser wird jetzt ein 2. Mal komplett im DG dargestellt, obwohl es eigentlich durchsichtig sein sollte. Quasi ein verkleinerter Hintergrund auf dem anderen. Schaut schräg aus ?

                              Liebe Grüße
                              Mario

                            • #2140
                              Klaus Major
                              Administrator

                                Echt? Das ist ja schrill!? :-/

                                Klingt für mich aber eher nach einem Bug!

                              • #2142
                                Tim K
                                Teilnehmer

                                  Hi Mario,

                                  sorry, ich glaube mittlerweile, dass das, was ich oben geschrieben habe, hier nicht relevant ist. Und es führt wahrscheinlich dazu, dass es etwas Durcheinander gibt bzgl. dessen, was wann scrollen soll.

                                  Ich habe mal getestet mit einer Datagrid Tabelle. Um sie zum Scrollen zu bringen, habe ich das Skript eingebaut, dass Klaus hier geteilt hat:

                                  http://forums.livecode.com/viewtopic.php?f=75&t=18643#p93753

                                  Ist schon etwas älter, aber hat bei mir einwandfrei funktioniert.

                                  Ich denke, dass englische Forum ist immer eine gute Adresse für Infos, die Community ist einfach etwas größer. Außerdem natürlich die Lessons, da gibt es ja reichlich. Ggf. das Dictionary oder das Livecode Wiki (das allerdings in weiten Teilen eine Kopie des Dictionary ist). Ansonsten evtl. Youtube oder Stackoverflow, mit dem ich für javascript / jQuery sehr gute Erfahrung gemacht habe. Allerdings ist Livecode hier nicht so wirklich verbreitet.

                                  Gruß Tim

                                • #2144
                                  Klaus Major
                                  Administrator

                                    Ach ja, vor ein paar Jahren hatte ich mal ein iPad für ein Projekt, da habe ich das geschrieben.
                                    Seitdem habe ich aber kein mobiles Gerät mehr.

                                  • #2148
                                    mario
                                    Teilnehmer

                                      Hallo ihr 2,

                                      der Scroller funktioniert jetzt. Ich habe das komplette DG noch einmal Schritt für Schritt erstellt und habe dann erkannt, dass der Fehler im Behavior Skript lag…
                                      Auch das “Hintergrundproblem” hat sich damit erledigt.

                                      Nun stehe ich allerdings schon wieder vor neuen Problemen (das DG kostet mich wirklich noch viele Nerven 😉 )
                                      Derzeit:
                                      Wenn man in einer Row auf einen Pfeil (“ArrowContracted) klickt, wird ein größeres Feld mit Text sichtbar. Bei Klick auf den dann erschienenen Pfeil (“ArrowExpanded”) verschwindet dieses Feld wieder.

                                      Gewünscht:
                                      Wie kann ich programmieren, dass beim Klick auf die Row schon das zusätzliche Feld erscheint, und wenn die Row nicht mehr gehilited ist, das Feld wieder verschwindet?

                                      Liebe Grüße
                                      Mario

                                    • #2150
                                      Klaus Major
                                      Administrator

                                        Hi Mario,

                                        schön, daß Du es ans laufen gebracht hast!
                                        Und ja, DataGrids sind leider mit das Komplexeste, was Livecode zu bieten hat! 😀

                                        Zu Deiner Frage, ich würde das wahrscheinlich ins Skript der Gruppe schreiben mit:
                                        on selectionchanged tCurrentIndex, tPreviousIndex

                                        Gruß

                                        Klaus

                                      • #2152
                                        mario
                                        Teilnehmer

                                          Hm, ok, danke. Da muss ich mich die nächsten Tage erst ein bisschen einlesen, wie man das umsetzt. Bin noch nicht so versiert mit dem ganzen…

                                          Liebe Grüße
                                          Mario

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