Scroller für Datagrid erstellen

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

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
      Verwalter

      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
      Verwalter

      Und so:

      local tScrollerRect, tContentRect
      
      on opencard
      ...

      ? 🙂

    • #2113
      Klaus Major
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.