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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.