Startseite › Foren › Deutsches LiveCode-Forum › Textfeld scrollen
Schlagwörter: Scrollbalken eines Textfeldes aktivieren
- Dieses Thema hat 20 Antworten und 5 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahren, 8 Monaten von Gil.
-
AutorBeiträge
-
-
Mai 29, 2020 um 09:14 Uhr #21215
Hallo Forum,
ich habe folgendes Problem: wenn der Inhalt eines Feldes dessen Größe übersteigt, ist auf dem Android-Handy der Scrollbalken so schmal, dass er nur schwierig zu aktivieren ist. Gibt es eine Möglichkeit, den Scrollbalken zu aktivieren, indem man einfach in das Textfeld tippt,so dass man dann anschließend durch Verschieben des Fingers im Textfeld dessen Inhalt scrollen kann? Vielen Dank für jede Anregung….. -
Mai 29, 2020 um 10:14 Uhr #21217
Hallo Peter,
das geht, ganz Handy-mäßig, mit einem nativen Scroller.
schau Dir mal diese Lektion an:
http://lessons.livecode.com/m/4069/l/94412-creating-a-native-scroller-to-scroll-a-fieldGruß
Klaus
-
Mai 29, 2020 um 14:53 Uhr #21221
Hallo Klaus,
vielen Dank für deinen Tipp, das werde ich mir gleich anschauen.
LG Peter -
Mai 29, 2020 um 15:05 Uhr #21222
Das ist etwas mühsam mit den ganzen mobilen nativen Sachen, aber vor den Erfolg haben die Götter den Schweiss gesetzt! 🙂
-
Mai 29, 2020 um 17:30 Uhr #21224
Hallo Klaus,
das kann man wohl laut sagen. Ich hatte gehofft, es gebe eine Möglichkeit, direkt per Code auf die im Field-Steuerelement integrierte Scrollleiste zuzugreifen. Dem ist offenbar nicht so…
Ich werde mal versuchen, das Problem
innerhalb der mouseMove – Prozedur mit dem select Line- Befehl zu lösen, obwohl das sicherlich wegen rückartiger Bewegungen nicht sehr elegant ist. Ich hatte primär schon erfolglos versucht, die Breite der Scrollleiste in den Properties zu vergrößern, Gibt es dafür einen Trick? Dann wären alle Kriterien für die benutzerfreundliche Bedienung meiner App erfüllt.
Peter -
Mai 29, 2020 um 17:47 Uhr #21225
Vielleicht ist es in kommenden Versionen anders/einfacher!
Daher bin ich täglich sehr froh, kein Handy, Tablet o.ä. zu besitzen und
dafür programmieren zu müssen! Ich KOENNTE es aber. 😀Du kannst
-> set the scrollbarwidth of FLD x to y
oder
-> set the scrollbarwidth of GRP x to yAber ich fürchte, das funktioniert nur auf dem Desktop.
-
Mai 29, 2020 um 18:00 Uhr #21227
Danke, das werde ich probieren und berichten.
-
Mai 29, 2020 um 21:30 Uhr #21228
Hi Peter,
hast Du es schon mit einem Native Android Field versucht?
Schau mal hier, habe ich gerade ausprobiert:
https://www.dropbox.com/s/687j1nmsrevdec7/Screenshot_20200529-212758.jpg?dl=0Man scrollt einfach über die ganze Fläche des Feldes.
LG
Torsten -
Mai 29, 2020 um 22:03 Uhr #21230
In dem Widget ist das „mit dem Finger scrollen“ schon eingebaut?
-
Mai 30, 2020 um 13:21 Uhr #21240
Ja, allerdings gibt es dann keinen Scrollbalken, an dem man sehen kann, wo man ist und wieviel Text noch kommt.
-
-
Mai 30, 2020 um 08:34 Uhr #21234
Hallo Klaus,
Vielen Dank für deinen Tipp. Da die Änderung
der Scrollleistenbreite in den Properties nicht funktionierte, hatte ich es im Code gar nicht erst ausprobiert. Dort funktioniert es aber einwandfrei, auch unter Android!
HG
Peter -
Mai 30, 2020 um 09:04 Uhr #21235
Hi Thorsten,
vielen Dank auch für deinen Hinweis.
Leider lässt sich das Widget scheinbar nicht als Datencontainer benutzen und steigt beim Versuch, es per Code zu befüllen, mit einer entsprechenden Fehlermeldung aus……..
LG
Peter -
Mai 30, 2020 um 11:53 Uhr #21236
Das sollte aber funktionieren!
Welche Fehlermeldung hast Du denn bekommen?Wichtig:
In der IDE funktionieren fast alle „mobilen“ Befehle nicht und LC spuckt dann einen ERROR aus.
Du musst das alles also in eine IF Klausel verpacken:... if the environment = "mobile" then ## mach Dein mobiles Ding ## mehr mobiler Kram... end if ...
Vielleicht liegt es daran, aber zeig doch mal, was du gescripted hast.
-
Mai 30, 2020 um 13:25 Uhr #21242
Also bei mir kann ich dem Text-Widget per
set the text of widget "Hier ist der Name meines Android Widgets" to tNeuerText
Daten einspeichern. Du kannst es halt nicht wie beim normalen Field mit „put x into field Y“ machen, daran musst Du denken.
-
Mai 30, 2020 um 13:36 Uhr #21244
Ach das war gemeint, daher zeig uns bitte Dein Skript!
-
Mai 31, 2020 um 13:24 Uhr #21250
Hi Torsten,
Vielen Dank für deinen Hinweis. Natürlich hatte ich es mit dem put – Befehl versucht und dann die Meldung bekommen „chunk is not a container“. Wenngleich ich auch schon gut mit der Vergrösserung der Scrollleistenbreite aufgrund von Klaus’s Tipp leben kann, werde ich deinen Tipp auch noch ausprobieren!
Liebe Grüße
Peter -
April 11, 2021 um 20:48 Uhr #27641
hi Thorsten,
kannst Du Dein Script posten?
Ich habe das hier versucht
https://lessons.livecode.com/m/4069/l/94412-creating-a-native-scroller-to-scroll-a-fieldAllerdings meckert mein Smartphone und auch das Tablet, dass es nicht Parsen kann bzw. APK ist beschädigt.
Ich möchte halt ohne Scrollbalken scrollen 🙂
LG
Gil-
April 12, 2021 um 02:08 Uhr #27645
Hi Gil,
meines Erachtens musst Du das Android-Text-Widget nehmen und in den Properties den Punkt „Scrolling enabled“ ankreuzen. Das ist alles 🙂
Happy Coding
Torsten
-
-
April 12, 2021 um 12:46 Uhr #27651
hi Torsten,
das war ja einfach! Danke Dir!
Weißt Du, wie man die Hintergrundfarbe von diesem Widget ändert?Grüße
Gil -
April 12, 2021 um 13:43 Uhr #27653
Hallo,
Das, was RunRev als Dokumentation hierfür anbietet, kann man in der Pfeife rauchen – vielleicht funktioniert es im iJail, auf Android sicher nicht.
Genereller Rat für Livecode-Anfänger:
Wenn Du nicht ausschließlich im Apple-Universum coden willst, mach Dich auf harte Zeiten gefasst! LiveCode wird hauptsächlich für & auf Apple entwickelt – alles andere sind ungeliebte Stiefkinder, für die nur das Allernotwendigste getan wird.
Die ständig wechselnden Anforderungen Apples (CPU-Typ, OS, XCode) halten das kleine Team in Edinburg so auf Trab, daß kaum mehr echte Entwicklung möglich ist.Mit der Folge, daß es für nicht-iJail-Programmierer so aussieht:
(qualitätsmäßig aufsteigend sortiert)
– HTML5: Praktisch unbrauchbar (nach Aussage von Leuten, die es probiert haben …);
– Linux: Praktisch unbrauchbar, keine Repos, grundlegende Features fehlen, Jahre alte Bugs immer noch nicht gefixt;
– Android: nur halbherzig implementiert – grundlegende Features fehlen, Jahre alte Bugs immer noch nicht gefixt, Dokumentation teils grob fehlerhaft;
– LC Server: Wer CGI haben will & viel Zeit & Mut hat – kaum Entwicklung dafür, wenig & teilweise grob fehlerhafte Dokumentation, neuere Versionen (> 8) werfen „SegFaults“ (bei mir).
– Windows: halbwegs brauchbar. IDE bei neueren Versionen (> 6) schnarchlangsam & absturzträchtig. Jahre alte Bugs immer noch nicht gefixt.LC 6.7.10 läuft gut.Zurück zum Thema – eigentlich ist es ganz einfach. Basics:
1.) Das Feld zum Scrollen (oder die Gruppe, die scrollen soll) darf keine „graphic effects“ (dropShadow, innerGlow) haben – das bremst gewaltig. Außerdem muß für die ggf. Gruppe „showBorder“ (Rahmen) deaktiviert sein (Feld darf Rahmen haben).
2.) Das, was gescrollt werden soll, muß „layerMode“: „Scrolling“ haben.
3.) „acceleratedRendering“ muss eingeschaltet sein.Ich poste mal den Code, um ein Feld zu scrollen, kopiert aus einer echten Android-Anwendung. Ich hoffe, ich habe beim Übersetzen nix kaputt gemacht & nicht allzu viel vergessen 🙂
Script im Stack:
on closeCard /* Weg damit, wenn wir die Karte wechseln! */ if isMob() then mobScrollDelete end closeCard function isMob /* Für die Schreibfaulen unter uns ... */ return (the environment = "mobile") end isMob on mobScrollDelete what /* MobScroller MÜSSEN entsorgt werden, bremsen sonst! */ if not isMob() then exit mobScrollDelete -- nur mobile end if if what is empty then repeat for each line L in mobileControls() mobileControlDelete L -- alle end repeat else mobileControlDelete what -- nur dies end if end mobScrollDelete
Das sorgt dafür, daß keine Reste verbleiben. Die bremsen Android nämlich ziemlich aus. Und definiert „isMob()“.
Script der Karte:
local lName constant kName = "myScroller" -- der Scroller constant kField = "data_fld" -- der "short name" des Felds on preOpenCard /* Erzeugt einen Dummy-Scroller */ if isMob() then mobScrollMake true end preOpenCard /* Das Folgende erzeugt & kontrolliert den mobileScroller "kName", der über das Feld "kField" gelegt wird. . Dieser Code muss irgendwo im "messagePath" liegen, zum Beispiel in "card script". Rufe "mobScrollMake true" einmal auf, wenn diese Karte angezeigt wird (preOpenCard). . Das erzeugt einen unsichtbaren "Dummy-Scroller", was das weitere Vorgehen beschleunigt. Rufe "mobScrollMake" or"mobScrollMake false" erst auf, wenn das zu scrollende Feld fertig ist . (also mit Daten befüllt, formattiert usw.). . Wenn sich am Feld was ändert (Zeilen löschen/ hinzufügen etc.), rufe es nochmal auf! "mobScrollMake true" erzeugt eine frische Kopie (löscht alle Vorgänger) oben links, unsichtbar, 10x10. "mobScrollMake" or "mobScrollMake false" passt diese dem aktuellen Feld an & aktiviert es. . (Wenn noch keins da ist, erzeugt es trotzdem eins.) */ on mobScrollMake isDummy if not isMob() then exit mobScrollMake if not isDummy then put false into isDummy put (the short name of this cd) & kName into lName -- so its unique (only 1 here) if isDummy then -- wir bauen einen Dummy if lName is in mobileControls() then -- ggf. erneuern wir ihn mobileControlDelete lName end if put "0,0,10,10" into theScR put "0,0,10,10" into theCnR mobileControlCreate "scroller", lName -- Dummy erzeugen put the result into lScID if lScID is not a number then answer "Failed to create the dummy scroller, Result:" & CR & lScID exit to top end if mobileControlSet lName, "visible", false -- Dummy ist unsichtbar else -- der echte Scroller set the vscrollbar of fld kField of this cd to false put the rect of fld kField of this cd into theScR put 0, 0, (the width of field kField of this cd), \ (the formattedHeight of field kField of this cd) into theCnR if not (lName is in mobileControls()) then -- wenn wir den noch nicht haben: mobileControlCreate "scroller", lName -- erzeugen wir ihn put the result into lScID if lScID is not a number then answer "Failed to create the mobile scroller, Result:" & CR & lScID exit to top end if end if mobileControlSet lName, "visible", true -- und machen ihn sichtbar end if mobileControlSet lName, "rect", theScR -- Immer: mobileControlSet lName, "contentRect", theCnR mobileControlSet lName, "scrollingEnabled", true mobileControlSet lName, "canBounce", true mobileControlSet lName, "vIndicator", true mobileControlSet lName, "vscroll", 1 end mobScrollMake on scrollerDidScroll hOffset, vOffset /* Das scrollt das Feld - muss im gleichen Skript wie "mobScrollMake" liegen! */ set the vScroll of fld kField of this cd to vOffset end scrollerDidScroll
Das macht die eigentliche Arbeit.
Script des Feldes:
local lStartLoc on mouseDown put the mouseLoc into lStartLoc -- merken, wo geklickt wurde -- ... end mouseDown on mouseUp /* Wenn weiter als [30] gewischt wurde, ist es ein "Swipe" & wird ignoriert. */ if (abs(the mouseH - item 1 of lStartLoc) > 30) OR \ (abs(the mouseV - item 2 of lStartLoc) > 30) then pass mouseUp -- Tu was - Es ist ein Klick! end mouseUp
„Swipe“-Erkennung.
So, nun befüllen wir unser Feld (namens „data_fld“, ansonsten „constant kField “ im Card Script ändern). Wenn alles fertig ist, rufen wir „mobScrollMake“ auf – Bingo.
Wenn sich die Maße des Feldes ändern (Zeilen löschen/ hinzufügen), müssen wir „mobScrollMake“ erneut aufrufen.
Wenn’s nicht klappt, Bescheid sagen. Dann bau ich einen Demo-Stack.
Viel Spaß!
-
April 12, 2021 um 14:45 Uhr #27658
hi Axwald,
das ist ja nicht gerade motivierend.
Bei HTML5 hatte ich schon aufgegeben, dass hat nichts mit der Werbung auf der Website zu tun.Schauen wir nach vorn!
Danke für den Input, ich werde das nachher ausprobieren.
Viele Grüße
Gil
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.