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.
-
AutorBeiträge
-
-
September 16, 2017 um 15:16 Uhr #2103
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 -
September 16, 2017 um 15:41 Uhr #2105
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
-
September 16, 2017 um 16:04 Uhr #2107
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 -
September 16, 2017 um 16:16 Uhr #2109
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
-
September 16, 2017 um 16:47 Uhr #2111
Und so:
local tScrollerRect, tContentRect on opencard ...
? 🙂
-
September 16, 2017 um 16:48 Uhr #2113
Und so:
local tScrollerRect, tContentRect on opencard ...
? 🙂
Also die lokalen Variablen OBEN im Skript deklarieren, damit sie in jedem Handler verfügbar ist!
-
September 16, 2017 um 16:53 Uhr #2115
nein, geht auch dann nicht…
-
September 16, 2017 um 17:04 Uhr #2117
Dann muss ich erst mal mangels Testmöglichkeit passen.
-
September 17, 2017 um 10:55 Uhr #2124
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 -
September 17, 2017 um 18:33 Uhr #2134
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 -
September 17, 2017 um 18:37 Uhr #2136
Hi Mario,
hier gibt es immer viel Info:
http://forums.livecode.comAber was genau meinst Du bei 1. mit “Hintergrund neu erstellen”?
Gruß
Klaus
-
September 17, 2017 um 18:47 Uhr #2138
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 -
September 17, 2017 um 19:10 Uhr #2140
Echt? Das ist ja schrill!? :-/
Klingt für mich aber eher nach einem Bug!
-
September 18, 2017 um 09:57 Uhr #2142
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
-
September 18, 2017 um 10:21 Uhr #2144
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. -
September 19, 2017 um 12:17 Uhr #2148
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 -
September 19, 2017 um 13:44 Uhr #2150
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, tPreviousIndexGruß
Klaus
-
September 19, 2017 um 14:59 Uhr #2152
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
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.