Startseite › Foren › Deutsches LiveCode-Forum › Problem mit mobile Scroller
- Dieses Thema hat 8 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 5 Jahren, 11 Monaten von wfr.
-
AutorBeiträge
-
-
November 9, 2018 um 21:45 Uhr #8471
Hallo,
Mich nervt ein Problem mit dem mobile Scroller (Android).
Ich habe einen Stack (stack1) und 2 Substacks (stack2 und stack3).
Vom Stack1 springe ich mittels Button jeweils auf stack2 (mit der card “b1”) bzw. auf den stack3 (mit der card “c1”).
Auf der card b1 und auf der card c1 ist jeweils ein Textfeld mit einem mobilen Scroller, die prinzipiell auch funktionieren. Springe ich zB. auf card b1, kann ich scrollen, gehe ich zurück auf stack1 und springe dann auf die card c1, funktioniert der Scroller dort nicht.
Beende ich das Programm, und mache es umgekehrt, also ich gehe zuerst auf card c1, funktioniert der Scroller, aber dann geht der auf card b1 nicht.on preOpenCard global sScrollerID global tScrollerRect, tContentRect, vOffset BewegeScroller end preOpenCard
Der Code, der sich jeweils im Stack2 und Stack3 befindet:
global sScrollerID global tScrollerRect, tContentRect, vOffset on BewegeScroller // Only create a scroller on a mobile device if environment() is not "mobile" then exit BewegeScroller put the rect of group "scrollArea" into tScrollerRect put 0,0,(the formattedWidth of group "scrollArea"),(the formattedHeight of group "scrollArea") into tContentRect // Create the scroller control mobileControlCreate "scroller", "scroller" put the result into ssScrollerID // Set the properties of the scroller mobileControlSet "scroller", "rect", tScrollerRect mobileControlSet "scroller", "contentRect", tContentRect mobileControlSet "scroller", "visible", true mobileControlSet "scroller", "scrollingEnabled", true mobileControlSet "scroller", "vIndicator", true mobileControlSet "scroller", "vscroll", 0 end BewegeScroller on scrollerDidScroll hOffset, vOffset // When the user scrolls move the displayed content set the vScroll of group "scrollArea" to vOffset end scrollerDidScroll
Ich hoffe, ihr könnt mit weiterhelfen.
Danke
Walter -
November 9, 2018 um 22:02 Uhr #8473
Hallo Walter,
verstehe ich das rihtig, Du benutzt EINEN (den selben) Scroller in verschiedenen Stacks?
Falls ja, ist das wohl keine allzu gelungene Idee, wie Du festgestellt hast.Alle Entwickler, die ich kenne, inklusive der Schotten (LC) selber, löschen den Scroller, wenn die Karte/Stack verlassen wird und erstellen ihn wieder neu bei Bedarf.
Gruß
Klaus
-
November 9, 2018 um 22:20 Uhr #8474
Hallo Klaus,
Das Löschen des Scrollers hatte ich auch schon eingebaut. Habe den Scrollern auch verschiedene Namen gegeben. Jetzt funktioniert genau 1x den Stack wechseln. Dann nicht mehr. Hier nochmal der gesamte Code:
Stack2 / Card b1:
on preOpenCard global sScrollerID global tScrollerRect, tContentRect, vOffset BewegeScroller end preOpenCard on closeCard // Delete the scroller global sScrollerID if environment() is not "mobile" then exit closeCard mobileControlDelete sScrollerID end closeCard
Stack2:
global sScrollerID global tScrollerRect, tContentRect, vOffset on BewegeScroller // Only create a scroller on a mobile device if environment() is not "mobile" then exit BewegeScroller put the rect of group "scrollArea" into tScrollerRect put 0,0,(the formattedWidth of group "scrollArea"),(the formattedHeight of group "scrollArea") into tContentRect // Create the scroller control mobileControlCreate "scroller", "my_scroller1" put the result into ssScrollerID // Set the properties of the scroller mobileControlSet "my_scroller1", "rect", tScrollerRect mobileControlSet "my_scroller1", "contentRect", tContentRect mobileControlSet "my_scroller1", "visible", true mobileControlSet "my_scroller1", "scrollingEnabled", true mobileControlSet "my_scroller1", "vIndicator", true mobileControlSet "my_scroller1", "vscroll", 0 end BewegeScroller on scrollerDidScroll hOffset, vOffset // When the user scrolls move the displayed content set the vScroll of group "scrollArea" to vOffset end scrollerDidScroll
Stack3 / card c1:
on preOpenCard global sScrollerID global tScrollerRect, tContentRect, vOffset BewegeScroller end preOpenCard on closeCard // Delete the scroller global sScrollerID if environment() is not "mobile" then exit closeCard mobileControlDelete sScrollerID end closeCard
Stack3:
global sScrollerID global tScrollerRect, tContentRect, vOffset on BewegeScroller // Only create a scroller on a mobile device if environment() is not "mobile" then exit BewegeScroller put the rect of group "scrollArea" into tScrollerRect put 0,0,(the formattedWidth of group "scrollArea"),(the formattedHeight of group "scrollArea") into tContentRect // Create the scroller control mobileControlCreate "scroller", "myscroller_2" put the result into ssScrollerID // Set the properties of the scroller mobileControlSet "myscroller_2", "rect", tScrollerRect mobileControlSet "myscroller_2", "contentRect", tContentRect mobileControlSet "myscroller_2", "visible", true mobileControlSet "myscroller_2", "scrollingEnabled", true mobileControlSet "myscroller_2", "vIndicator", true mobileControlSet "myscroller_2", "vscroll", 0 end BewegeScroller on scrollerDidScroll hOffset, vOffset // When the user scrolls move the displayed content set the vScroll of group "scrollArea" to vOffset end scrollerDidScroll
Danke
Walter -
November 9, 2018 um 22:43 Uhr #8475
Die Skripte sehen gut aus, keine Ahnung, was da schief läuft.
Du hast eine globale Variable namens vOffset, benutzt aber im Handler “on scrollerdidscroll” einen Parameter gleichen Namens. Muss nichts bedeuten, aber wer weiß…
Ausserdem würde ich mal versuchen, sSCrollerID als LOKALE Variable pro Stack zu benutzen.
Aber wie gesagt, alles Schüsse ins Blaue…
-
November 9, 2018 um 23:06 Uhr #8478
Habe den Code umgebaut, aber hat nichts geändert.
Stack2, card b1:
on preOpenCard local sScrollerID local tScrollerRect, tContentRect // Only create a scroller on a mobile device if environment() is not "mobile" then exit preOpenCard put the rect of group "scrollArea" into tScrollerRect put 0,0,(the formattedWidth of group "scrollArea"),(the formattedHeight of group "scrollArea") into tContentRect // Create the scroller control mobileControlCreate "scroller", "my_scroller1" put the result into ssScrollerID // Set the properties of the scroller mobileControlSet "my_scroller1", "rect", tScrollerRect mobileControlSet "my_scroller1", "contentRect", tContentRect mobileControlSet "my_scroller1", "visible", true mobileControlSet "my_scroller1", "scrollingEnabled", true mobileControlSet "my_scroller1", "vIndicator", true mobileControlSet "my_scroller1", "vscroll", 0 end preOpenCard on closeCard // Delete the scroller global sScrollerID if environment() is not "mobile" then exit closeCard mobileControlDelete sScrollerID end closeCard
Stack2:
on scrollerDidScroll hOffset, vOffset // When the user scrolls move the displayed content set the vScroll of group "scrollArea" to vOffset end scrollerDidScroll
Stack3, card c1:
on preOpenCard local sScrollerID local tScrollerRect, tContentRect, vOffset // Only create a scroller on a mobile device if environment() is not "mobile" then exit preOpenCard put the rect of group "scrollArea" into tScrollerRect put 0,0,(the formattedWidth of group "scrollArea"),(the formattedHeight of group "scrollArea") into tContentRect // Create the scroller control mobileControlCreate "scroller", "myscroller_2" put the result into ssScrollerID // Set the properties of the scroller mobileControlSet "myscroller_2", "rect", tScrollerRect mobileControlSet "myscroller_2", "contentRect", tContentRect mobileControlSet "myscroller_2", "visible", true mobileControlSet "myscroller_2", "scrollingEnabled", true mobileControlSet "myscroller_2", "vIndicator", true mobileControlSet "myscroller_2", "vscroll", 0 end preOpenCard on closeCard // Delete the scroller global sScrollerID if environment() is not "mobile" then exit closeCard mobileControlDelete sScrollerID end closeCard
Stack3:
on scrollerDidScroll hOffset, vOffset // When the user scrolls move the displayed content set the vScroll of group "scrollArea" to vOffset end scrollerDidScroll
Ich beschreibe nochmals das Szenario:
– ich starte das Programm
– ich springe von stack1 auf stack2 —> scroller funktioniert!
– ich springe zurück zu stack1
– ich springe von stack1 auf stack3 —> scroller funktioniert!
– ich springe zurück zu stack1
– ich springe von stack1 auf stack2 —-> scroller funktioniert nicht mehr!echt mysteriös….
-
November 10, 2018 um 01:00 Uhr #8479
Hm, Du hast einmal sScrollerID als Lokal und einmal als Global definiert, bitte entscheide Dich. 🙂
Globale/Lokale Variablen deklariert man am Besten ÜBER allen Handlern im Skript, so kann auch jeder Handler darauf zugreifen:
Stack2, card b1:local sScrollerID, tScrollerRect, tContentRect on preOpenCard local sScrollerID local tScrollerRect, tContentRect // Only create a scroller on a mobile device if environment() is not "mobile" then exit preOpenCard put the rect of group "scrollArea" into tScrollerRect put 0,0,(the formattedWidth of group "scrollArea"),(the formattedHeight of group "scrollArea") into tContentRect // Create the scroller control mobileControlCreate "scroller", "my_scroller1" put the result into ssScrollerID // Set the properties of the scroller mobileControlSet "my_scroller1", "rect", tScrollerRect mobileControlSet "my_scroller1", "contentRect", tContentRect mobileControlSet "my_scroller1", "visible", true mobileControlSet "my_scroller1", "scrollingEnabled", true mobileControlSet "my_scroller1", "vIndicator", true mobileControlSet "my_scroller1", "vscroll", 0 end preOpenCard on closeCard // Delete the scroller ## Ist aber LOKAL deklariert! ## global sScrollerID if environment() is not "mobile" then exit closeCard mobileControlDelete sScrollerID end closeCard
Dito für: Stack3, card c1:
Und Dein Stack2 hat kein Skript zu Scrollererstellung.
Gruß
Klaus
-
November 11, 2018 um 13:15 Uhr #8503
Hallo Klaus,
Danke für den Tipp mit den Variablen. Hat aber nichts gebracht.
Was meinst du mit “Stack2 hat kein Skript zur Scrollerstellung” ?
Das oben angefügte Skript erstellt doch den Scroller?!lg Walter
-
November 11, 2018 um 16:20 Uhr #8511
Pardon, mein Fehler, hatte ich übersehen.
-
November 11, 2018 um 18:28 Uhr #8522
Habe das Problem im englischsprachigen Forum gepostet. Mal sehen….
lg Walter
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.