Datagrid mit Scroller

Startseite Foren Deutsches LiveCode-Forum Datagrid mit Scroller

Ansicht von 5 Antwort-Themen
  • Autor
    Beiträge
    • #14812
      jo.keller
      Teilnehmer

        Hallo zusammen,

        ich bräuchte beim Scrollen des Datagrid Eure Hilfe:

        Hintergrund:
        Ich habe auf der Hauptseite ein DG, beim Klick auf einer Zeile (Ortsnamen) erscheinen die Daten zum jeweiligen Ort.
        Mit dem Zurückgehen auf die Hauptseite erscheint wieder das DG. Das DG soll nicht wieder neu aufgebaut werden, sondern die Zeile angezeigt werden, die vorher ausgewählt wurde.

        Unter IDE funktioniert das auch, unter Android mit dem u.a. Scroller leider nicht.
        Ich habe den Scroller aus dem Forum benutzt (https://www.livecode-blog.de/forums/topic/scroller-fuer-datagrid-erstellen/),

        Beim Zurückgehen auf die Hauptseite, wird das DG neu aufgebaut, d.h. es wird mit der ersten Zeile wieder angezeigt.
        Ich verstehe den Ablauf des Scrollers nicht 🙁

        Meine Frage:
        Wo muss ich was im Scroller ändern, dass das DG nicht immer am Anfang angezeigt wird.

        Danke für jede Hilfe.

        Gruß
        Joachim

        der Scroller:
        ——————————————————————–
        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
        ——————————————————————–

      • #14814
        Klaus Major
        Administrator

          Hallo Joachim,

          bitte, bitte, bitte, benutzt die CODE tags (der Button, auf dem “code” steht über dem Eingabefeld) nachdem ihr ein Skript hier eingefügt habt. Dann bleibt die Formatierung (Einrückung!) erhalten und man kann das auch LESEN!
          Schlecht:
          on openCard
          scroller_create
          machdies
          machjenes
          unddasauchnoch
          end openCard

          on closeCard
          scroller_delete
          end closeCard

          Gut:

          on openCard
             scroller_create
             machdies
             machjenes
             unddasauchnoch
          end openCard
          
          on closeCard
             scroller_delete
          end closeCard

          OK, kannst Du Dir den SCROLL des Scrollers und des Datagrids beim verlassen der Karte merken und beim erneuten Besuch der Karte wiederherstellen? Vielleicht in einer LOKALEN Variable der Karte, die leer ist, wenn die App startet? 😎

          Ich denke ihr macht euch das alles zu schwer, denkt an Analogien im richtigen Leben. Da würdet ihr das alles ohne groß nachzudenken machen.

          Beispiel (OK, Analogien zu Computerproblemen sind immer etwas schräg ins echte Leben übertragen):
          Du besitzt ein Zimmer mit einem Fenster mit Rolläden und vermietest es.
          Immer, wenn jemand das Zimmer betritt, sind die Rolläden hochgezogen. (DAS ist schräg! 😀 )
          Dein Mieter möchte die Rolläden aber immer so weit unten haben, wenn er das Zimmer wieder betritt, wie er sie heruntergezogen hatte vor dem verlassen des Zimmers.
          Was machst Du, wenn er das Zimmer verlässt? Zollstock ist vorhanden!
          Und was machst Du, nachdem er das Zimmer wieder betreten hat, um seinen Wunsch zu erfüllen?
          Bedenke, die Rolläden sind dann immer ganz oben.

          Ich hoffe, das verschafft Dir einen kleinen “Ach so, logisch!” Moment! 🙂
          Falls nicht, oder falls Dir meine Andeutungen zu schwammig sind, bitte wieder nachfragen.

          Gruß

          Klaus

        • #14945
          jo.keller
          Teilnehmer

            Hallo Klaus,

            die Formatierung mit “code” werde ich zukünftig beachten.

            Gruß
            Joachim

          • #14949
            Klaus Major
            Administrator

              Hast Du es denn nun hinbekommen mit dem Scroller oder waren meine Andeutungen einfach zu vage?

            • #14951
              jo.keller
              Teilnehmer

                Hallo Klaus,

                ich glaube zu verstehen, was du meintest, habe es bisher nochnicht geschafft. Die Idee, den Zustand zu merken (Zeilennummer) hat den Scroller aber nicht beeindruckt.
                Wahrscheinlich habe ich das ganze Konstrukt noch nicht verstanden.

                Als Alternative könnte auch das Scrollen mit dem Scrollbalken funktionieren, mit dem Scroller wäre es eben etwas “schöner”. In der IDE funktioniert es und der Scroller ist nur in Android aktiv.

                Gruß
                Joachim

              • #14953
                Klaus Major
                Administrator

                  OK, hier das geänderte Skrtipt, siehe meine Kommentare.
                  Bitte mal testen, ich kann das mangels Handy etc. nicht.

                  ## Wichtig!!!
                  local sScrollerID
                  
                  ## In diesen Variablen merken wir uns den Scroll des NATIVEN Scrollers 
                  ## und vorsichtshalber auch den Scroll des Datagrids. 
                  local letzterscroll_scroller
                  local letzterscroll_datagrid
                  
                  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
                     
                     ## Lokale Variablen sind erst einmal leer, wenn die App startet.
                     ## Daher können wir Folgendes machen:
                     if letzterscroll_scroller = EMPTY then
                        put 0 into letzterscroll_scroller
                        
                        ## Wenn diese Variable leer ist, ist die andere es auch!
                        put 0 into letzterscroll_datagrid      
                     end if
                     
                     ## Hier dann die Wiederherstellung des nativen Scrollers
                     mobileControlSet "listScroll", "vscroll", letzterscroll_scroller
                     
                     ## Und des Datagrids. Ob das wirklich nötig ist, kann ich nicht sagen, 
                     ## musst Du mal ausprobieren, indem Du diese Zeile mal aukommentierst
                     set the dgVScroll of grp "dgRouten" to letzterscroll_datagrid
                  end scroller_create
                  
                  on scroller_delete
                     if the environment is not "mobile" then exit scroller_delete
                  
                    
                     ## DAS meinte ich eigentlich damit, was Du Dir merken solltest 
                     ## und wieder herstellen solltest:
                     put mobileControlGet(sScrollerID, "vScroll") into letzterscroll_scroller
                     
                     ## Zur Sicherheit auch mal merken, siehe unten...
                     put the dgVScroll of grp "dgRouten" into letzterscroll_datagrid
                  
                     ## Jetzt löschen
                     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
              Ansicht von 5 Antwort-Themen
              • Du musst angemeldet sein, um auf dieses Thema antworten zu können.