Buttongruppe auf Handy – anderes Verhalten als in der IDE

Startseite Foren Deutsches LiveCode-Forum Buttongruppe auf Handy – anderes Verhalten als in der IDE

Ansicht von 8 Antwort-Themen
  • Autor
    Beiträge
    • #13567
      gfz
      Teilnehmer

        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

      • #13569
        Klaus Major
        Administrator

          Hi Georg,

          wirklich deaktiviert (disabled) oder nur nicht funktional?

          Gruß

          Klaus

        • #13571
          gfz
          Teilnehmer

            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

          • #13573
            gfz
            Teilnehmer

              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

            • #13575
              Klaus Major
              Administrator

                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.

              • #13577
                Klaus Major
                Administrator

                  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.

                • #13579
                  gfz
                  Teilnehmer

                    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

                  • #13581
                    Klaus Major
                    Administrator

                      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.

                    • #13583
                      gfz
                      Teilnehmer

                        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

                    Ansicht von 8 Antwort-Themen
                    • Du musst angemeldet sein, um auf dieses Thema antworten zu können.