Datagrid mit Scroller

Startseite Foren Deutsches LiveCode-Forum Datagrid mit Scroller

Dieses Thema enthält 5 Antworten und 2 Teilnehmer. Es wurde zuletzt aktualisiert von  Klaus Major vor 1 Woche.

  • 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 (http://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
    Moderator

    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
    Moderator

    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
    Moderator

    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

Du musst angemeldet sein, um auf dieses Thema antworten zu können.