Startseite › Foren › Deutsches LiveCode-Forum › Buttongruppe auf Handy – anderes Verhalten als in der IDE
- Dieses Thema hat 8 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 5 Jahren, 6 Monaten von gfz.
-
AutorBeiträge
-
-
März 15, 2019 um 20:10 Uhr #13567
Liebe LivecoderInnen!
Ich habe eine kleine App programmiert fürs Handy, die es mir erlaubt das ukrainische Alphabet zu erlernen.
Hauptbestandteil dieser Anwendung ist eine Gruppe von 32 Buttons, die die Buchstaben repräsentieren. Im Lernmodus
kann ich die einzelnen Buttons drücken und höre anschließend den Buchstaben als WAV-Datei. Im Testmodus höre ich zuerst den
Buchstaben als Sounddatei abgespielt und werde dann aufgefordert den entsprechenden Buchstaben-Button zu drücken, den ich glaube gehört zu haben.
Dabei disable/enable ich die gesamte Gruppe von Buttons entsprechend.
In der IDE funktioniert alles sehr gut nur am Handy sind einige Buttons deaktiviert. Hat jemand eine Idee woran das liegen könnte?
Ich entwickle unter Windows mit LC 9.0.2.
Bin für jeden Tipp dankbar
liebe Grüße
Georg -
März 15, 2019 um 21:01 Uhr #13569
Hi Georg,
wirklich deaktiviert (disabled) oder nur nicht funktional?
Gruß
Klaus
-
März 15, 2019 um 21:23 Uhr #13571
Hallo Klaus,
danke für Deine Antwort.
Bei beiden Modi (Lernen und Abfragen) sind einige Buttons dünkler, also scheinbar disabled.
Im Lernmodus, wo ich auf Knopfdruck die entsprechende Sounddatei abspielen lasse funktionieren jedoch alle wie vorgesehen – sowohl die dunklen wie auch die hellen.
Im Abfragemodus, wo ich nach hören der Sounddatei den Buchstabenbutton drücke und der Buchstabe dann in ein Feld geschrieben werden soll funktioniert keiner von den Buttons. Aber auch hier sind helle und dunkle zu sehen.
In der IDE sind jedoch alle Buttons visible (häckchen gesetzt) und enabled (kein Häckchen bei disabled).
Die Buttons sind auch von den Ebenen her aufsteigend ab Ebene 3 hintereinander gereiht.
Ich kann mir dieses Verhalten nicht erklären.
liebe Grüße
Georg -
März 15, 2019 um 22:00 Uhr #13573
Werde da mal die Skripte posten:
Das ist im Stack:
global preRecPath global appMode global soundList on openStack setPath2preRec fillSoundList end openStack on setPath2preRec if the environment is "mobile" then put specialFolderPath("engine") into thisAppPath else put the filename of this stack into thisAppPath set the itemDelimiter to "/" delete the last item of thisAppPath end if put thisAppPath&"/wav/" into preRecPath end setPath2preRec on fillSoundList put files(preRecPath) into soundList end fillSoundList
Und das in der Card:
global preRecPath global appMode global listOfButtons global exitLearning global stopListening global startTest -- Modes: learn, checkMe on openCard put false into exitLearning put false into stopListening put false into startTest initStartView fillBtnList end openCard on initStartView put "learn" into appMode set the hilitedItem of widget "navBar" of me to 1 setDisplayToLearnMode end initStartView on setDisplayToLearnMode set the visible of group "grpPlayAll" of me to true set the visible of group "grpPlaySingle" of me to true put empty into field "LetterOutput" of me set the visible of field "LetterOutput" of me to true set the visible of field "userInstructions" of me to false set the visible of field "myGuess" of me to false set the visible of field "correctLetter" of me to false set the visible of group "cyrillicKeyboard" of me to true disable group "cyrillicKeyboard" of me set the visible of field "inCorrect" of me to false set the visible of field "inTotal" of me to false set the visible of field "outFrom" of me to false set the visible of field "outRight" of me to false set the visible of group "grpStartTest" of me to false set the visible of field "numOfTriesLabel" of me to false set the visible of field "numOfTry" of me to false end setDisplayToLearnMode on setDisplayToTestMode set the visible of group "grpPlayAll" of me to false set the visible of group "grpPlaySingle" of me to false set the visible of field "userInstructions" of me to false set the visible of field "myGuess" of me to true set the visible of field "correctLetter" of me to true set the visible of group "cyrillicKeyboard" of me to true enable group "cyrillicKeyboard" of me set the visible of field "inCorrect" of me to true put 0 into field "inCorrect" of me set the visible of field "inTotal" of me to true put 0 into field "inTotal" of me set the visible of field "outFrom" of me to true set the visible of field "outRight" of me to true set the visible of field "LetterOutput" of me to false put empty into field "myGuess" of me put empty into field "correctLetter" of me set the visible of group "grpStartTest" of me to true set the visible of field "numOfTriesLabel" of me to true set the visible of field "numOfTry" of me to true put 0 into field "numOfTry" of me end setDisplayToTestMode on fillBtnList set the itemDelimiter to space put 0 into tX repeat with x = 1 to the number of buttons of me put the name of btn(x) into tN --put tN after msg if item 2 of tN contains "LETTER_" then add 1 to tX if tX = 1 then put item 2 of tN into tLi replace quote with empty in tLi put tLi into listOfButtons else put item 2 of tN into tLi replace quote with empty in tLi put return & tLi after listOfButtons end if enable button tLi of me end if end repeat --put listOfButtons end fillBtnList on modeChanged if appMode is "learn" then setDisplayToLearnMode else setDisplayToTestMode end if end modeChanged on mouseUp if appMode is "learn" then if "LETTER_" is in the target then set the itemDelimiter to space put item 2 of the target into tBtn replace quote with empty in tBtn --put tBtn after msg put preRecPath & tBtn & ".wav" into tSound set the backgroundColor of button tBtn of this card to "#A0FFA0" put the label of the target into field "LetterOutput" of this card play tSound wait until the sound is done with messages set the backgroundColor of button tBtn of this card to empty end if end if if appMode is "checkMe" then if "LETTER_" is in the target then put the label of the target into field "myGuess" of this card end if end if end mouseUp
Damit schalte ich zwischen den beiden Modi um mittels Navigation Bar Widget:
global appMode on hiliteChanged put the hilitedItemName of me into appMode send "modeChanged" to me end hiliteChanged
Damit schalte ich im Lernmodus die Wiedergabe aller Buchstaben ein. Dazu habe ich eine Gruppe aus einem Button und einem SVG Widget erstellt und das Skript ist in der Gruppe plaziert:
global preRecPath global listOfButtons global exitLearning on mouseUp if not exitLearning then put true into exitLearning set the backgroundColor of button "btnPlayAll" of me to empty else put false into exitLearning set the backgroundColor of button "btnPlayAll" of me to "#A0FFA0" repeat for each line tL in listOfButtons --put line(tL) of listOfButtons into tBtn put preRecPath & tL & ".wav" into tSound put the label of button tL of this card into field "LetterOutput" of this card set the backgroundColor of button tL of this card to "#A0FFA0" play tSound wait until the sound is done with messages set the backgroundColor of button tL of this card to empty if exitLearning then put empty into field "LetterOutput" of this card exit repeat end if end repeat end if end mouseUp
Ebenso im Lernmodus jene Funktion, mit der ich auf Tastendruck den Buchstaben vorgelesen bekomme, wieder als Gruppe von Button und SVG Widget. Skript befindet sich in der Gruppe:
global preRecPath global listOfButtons global exitLearning global stopListening on mouseUp if not stopListening then put true into stopListening disable group "cyrillicKeyboard" of this card set the backgroundColor of button "btnPlaySingle" of me to empty put empty into field "LetterOutput" of this card else put false into stopListening enable group "cyrillicKeyboard" of this card set the backgroundColor of button "btnPlaySingle" of me to "#A0FFA0" end if pass mouseUp end mouseUp
Hier noch die Funktionalität des Testmodus. Wieder als Gruppe von Button und SVG Widget. Skript ist wieder in dieser Gruppe abgelegt:
global preRecPath global startTest on mouseUp put files(preRecPath) into tRecordedLetters sort lines of tRecordedLetters by random(500) if startTest then put false into startTest set the backgroundColor of button "btnStartTest" of me to empty disable group "cyrillicKeyboard" of this card set the visible of field "userInstructions" of this card to false else put true into startTest set the backgroundColor of button "btnStartTest" of me to "#A0FFA0" set the visible of field "userInstructions" of this card to false disable group "cyrillicKeyboard" of this card put the number of lines in tRecordedLetters into field "inTotal" of this card put 0 into tX repeat for each line tSoundFile in tRecordedLetters put empty into field "myGuess" of this card put empty into field "correctLetter" of this card add 1 to tX put tX into field "numOfTry" of this card put tSoundFile into tLetter replace ".wav" with empty in tLetter put the label of button tLetter of this card into tLetter --put return & tLetter after msg put preRecPath & tSoundFile into tSound --put return & tSound after msg play tSound wait until the sound is done with messages enable group "cyrillicKeyboard" of this card show field "userInstructions" of this card wait 3 seconds with messages disable group "cyrillicKeyboard" of this card hide field "userInstructions" of this card put tLetter into field "correctLetter" of this card wait 0.5 seconds with messages if not startTest then put empty into field "myGuess" of this card put empty into field "correctLetter" of this card put 0 into field "inCorrect" of this card put 0 into field "inTotal" of this card put 0 into field "numOfTry" of this card exit repeat end if if field "myGuess" of this card is not empty then put field "myGuess" of this card into tUsersGuess if tUsersGuess = tLetter then add 1 to field "inCorrect" of this card end if end if end repeat end if end mouseUp
cyrillicKeyboard fasst alle 32 Buchstabenbuttons zu einer Gruppe zusammen.
liebe Grüße,
Georg -
März 15, 2019 um 22:10 Uhr #13575
OK, fangen wir mal hier an:
... if the environment is "mobile" then put specialFolderPath("engine") into thisAppPath else put the filename of this stack into thisAppPath set the itemDelimiter to "/" delete the last item of thisAppPath end if put thisAppPath&"/wav/" into preRecPath ...
Wenn Du die Sounddateien über “Copy files” im “Standalone Application Settings” Dialog hinziugefügt hast, findest Du sie hier -> specialfolderpath(“resources”)
Dieser specialfolderpath() funktioniert auch in der IDE und zeigt dort auf den Ordner, in dem sich er aktuelle Stack befindet.
Diese Zeile sollte daher für alle Platformen reichen, ohne IF THEN:... put specialfolderpath("resources") & "/wav/" into preRecPath ...
Also bitte mal korrigieren und testen.
-
März 15, 2019 um 22:20 Uhr #13577
Ein paar nützliche Tips:
the name of btn x -> button “names des buttons”
the short name of btn x -> name des buttons (Ohne Anführungszeichen!)Wegen:
... set the itemDelimiter to space put item 2 of the target into tBtn replace quote with empty in tBtn ...
-> put the short name of the target into tBtn
Effektiver, aber nicht in diesem Beispiel 🙂
... set the itemDelimiter to space put item 2 of the target into tBtn ...
-> Put word 2 of the target into tBtn
... disable group "cyrillicKeyboard" of this card ...
Da wir uns ja schon auf “this card” befinden, kannst Du das “of this card” getrost weglassen.
Dito “… of me”, sofern es sich nicht um das Skript einer GRUPPE handelt, was ein Objekt in dieser Gruppe anspricht. -
März 15, 2019 um 22:21 Uhr #13579
Okay Klaus,
danke für den Hinweis. Habe die Änderung im Code durchgeführt und aufs Handy gebracht. Die Wiedergabe funktioniert wie zuvor. Am Verhalten der Buttons hat sich dadurch jedoch leider nichts geändert.
Liebe Grüße,
Georg -
März 15, 2019 um 22:27 Uhr #13581
Es wundert mich sehr, daß die Sounds vorher überhaupt abgespielt wurden, da sie sich ja nicht an dem angegebenen Ort befunden haben. Vielleicht “korrigiert” LC das intern?
Sorry, keine Idee zum “komischen” Aussehen der Buttons.
-
März 15, 2019 um 22:48 Uhr #13583
Hallo Klaus,
Danke für die Tipps, mit dem short name of the target bzw. word 2 of the target.
Wegen “this card” und me:
das habe ich nach langer Fehlersuche hinzugefügt, da es ohne diese Zusätze immer wieder an diversen Stellen zu Abstürzen und Errors kam.
Ich werde das mal mit native android buttons probieren. Dazu muss ich mich aber erst mal einlesen.Auf jeden Fall, danke dass du dir die Zeit genommen hast und dir meinen Code durchgesehen hast.
Liebe Grüße,
Georg
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.