Card wechseln per Zeitsteuerung?

Startseite Foren Deutsches LiveCode-Forum Card wechseln per Zeitsteuerung?

Ansicht von 7 Antwort-Themen
  • Autor
    Beiträge
    • #14415
      hGau
      Teilnehmer

        Hallo zusammen,

        ich habe mit LiveCode eine Art Kioskanwendung gemacht, mit der sich User über unser Institut informieren können.
        Bisher hatte ich sowas mit Adobe Director erstellt, aber da das nicht mehr “lebt”, habe ich jetzt zu LiveCode gewechselt.

        Meine Frage:
        Die Anwendung soll noch einen eigenen Bildschirmschoner bekommen. Wenn also eine der “Kioskseiten” länger als z.B. 5 Minuten steht, ohne dass eine Eingabe erfolgte, soll eine Card aufgerufen werden, die eine Bildschirmschoner-Animation enthält. Von dort soll dann wieder nach einer gewissen Zeit auf die Startseite zurück gesprungen werden.

        In Director war so eine Zeitsteuerung kein Problem (go the frame Handler). Aber wie kann ich so etwas in LiveCode umsetzen?

        LG
        Hartmut

      • #14419
        Herby
        Teilnehmer

          Hallo Hartmut,

          ich aktualisiere meine Uhr im Programm folgendermaßen :
          (die Routine muss ich natürlich einmal im OpenStack mit UhrAnzeige starten, damit sie sich selber wieder starten kann)

          on UhrAnzeige
          put the time into fld uhr of card id 1002
          send UhrAnzeige to this stack in 250 milliseconds
          end UhrAnzeige

          Könnte mir vorstellen, dass dies auch so funktioniert :

          on Bildschirmschoner
          ## steuere irgendwas
          send Bildschirmschoner to this stack in 5 minutes
          end Bildschirmschoner

          Beste Grüße aus Bayern
          Herby

        • #14432
          hGau
          Teilnehmer

            Hallo Herby,

            vielen Dank für die schnelle Antwort. 🙂

            Das ist eine gute Idee. Ich müsste aber noch eine Möglichkeit finden, sicherzustellen, dass der Aufruf nach 5 Minuten nur erfolgt, wenn in diesen 5 Minuten keine Usereingaben (mouseup) etc. erfolgt sind. Der Bildschirmschoner soll ja nur dann nach 5 Minuten kommen, wenn niemand das Programm bedient hat.

            Wie könnte man das machen?

            LG
            Hartmut

          • #14434
            Klaus Major
            Administrator

              Hallo Herby,

              ich weiß, ich nerve, aber bitte gewöhn Dir in dienem eigenen Interesse an, Strings (Eigennamen) in Anführungszeichen zu setzen. Sonst beisst Dich das irgendwann, da die Engine mit jeder Version weniger “rücksichtsvoll” mit nicht offizieller Syntax umgeht!

              on UhrAnzeige
                put the time into fld "uhr" of card id 1002
                send "UhrAnzeige" to this stack in 250 milliseconds
              end UhrAnzeige
              
              on Bildschirmschoner
                ## steuere irgendwas
                ## send Bildschirmschoner to this stack in 5 minutes
                ## minutes gibt einen Error, so weit denkt die Engine nicht :-D
                send "Bildschirmschoner" to this stack in (5 * 60 seconds)
              end Bildschirmschoner

              Weitersagen, danke! 🙂

            • #14436
              Klaus Major
              Administrator

                Hallo Hartmit

                willkommen im Forum!

                Ich müsste aber noch eine Möglichkeit finden, sicherzustellen, dass der Aufruf nach 5 Minuten nur erfolgt, wenn in diesen 5 Minuten keine Usereingaben (mouseup) etc. erfolgt sind. Der Bildschirmschoner soll ja nur dann nach 5 Minuten kommen, wenn niemand das Programm bedient hat.
                Wie könnte man das machen?

                Das ist aber schon fortgeschrittener Stoff, wie fit bist Du bereits in LC?

                Auch in “Director”, von dem ich schon vor fast 20 Jahren zu LC bzw. seinen Vorfahren gewechselt war, ist es natürlich nicht mit einem einfachen “go to the frame” getan. 😉

                Gruß

                Klaus

              • #14438
                hGau
                Teilnehmer

                  Hallo Klaus,

                  vielen Dank für die Begrüßung! 🙂

                  Ich habe viele Jahre mit Director gearbeitet. Bei LC bin ich noch am “warm werden”, wobei die Sprache wegen der Lingo-Ähnlichkeit kein großes Problem ist. Die Kiosk-Anwendung war nicht weiter schwierig für mich, weil sie nicht allzu komplex ist. Vorher hatte ich Hauke Fehrs Buch durchgearbeitet.

                  Was ich mit dem “go the frame” meinte:
                  In Director konnte ich einfach im gtf-Script einen Zähler hochlaufen lassen. Wann immer im Programm eine Eingabe gemacht wurde, habe ich den Zähler wieder auf 0 gesetzt. So konnte ich sichergehen, dass er seine Zielzahl nur erreicht, wenn über längere Zeit keine Useraktion erfolgte – und dann erst zum Frame mit dem Bildschirmschoner springt.

                  In LC gibt es prinzipbedingt diesen gtf-Ansatz nicht, daher bin ich etwas unsicher, wo ich so eine kontinuierliche Abfrage anbringen kann.

                  LG
                  Hartmut

                • #14442
                  Klaus Major
                  Administrator

                    Hi Hartmut,

                    da kommen ein paar vage Erinnerungen hoch, ja, stimmt, Director musste man immer sagen “Nun bleib doch mal hier!”, bei LC “Nun geht doch mal woanders hin!” 😀

                    OK, Dein Wunsch ist recht komplex, gehen wirs an!

                    Ein geSENDeter Befehlt ist hier natürlich auch nötig, aber wichtig ist ein FRONTSCRIPT, was alle Usereingaben registriert und dann weiterleitet.

                    Was benötigen wir:
                    1. Zuerst einmal alles sammeln, was als “User Interaktion” (UI) gelten kann, also mouseup, keydown etc. und in ein Frotscript packen:

                    global ZeitSeitLetzterUI
                    on mouseup
                      put the seconds into ZeitSeitLetzterUI
                    
                      ## OK, registriert, nun weitergeben!
                      PASS mouseup
                    end mouseup
                    
                    on keyup
                      put the seconds into ZeitSeitLetzterUI
                      PASS keyup
                    end keyup
                    
                    ## etc. für alles, was Du für User Interaktionen hälst

                    2. Einen Befehl, der prüft, wieviel Zeit seit der letzten UI vergangen ist.
                    Der wird periodisch geSENDet und handelt entsprechend, wenn es Zeit ist.
                    3. Eine globale Variable, die den Zeitpunkt der letzten UI hält, damit wir das mit unserem Limit vergleichen können. Siehe oben…
                    4. Wir setzen diese Variable auf -> the seconds direkt “on openstack” und INSERTen das Frontscript. Und wir rufen direkt das CHECKER Skript auf -> zeitabgelaufen
                    5. Dann benötigen wir einen Handler, der die ganze Zeit die abgelaufene Zeit überprüft und reagiert, wenn das Limit überschritten ist, der geht ins Stackskript:

                    global ZeitSeitLetzterUI
                    
                    command zeitabgelaufen
                      put the seconds into tAktuelleZeit
                      ## Sofern Du das Limit auf 5 Minuten setzt:
                      if tAktuelleZeit - ZeitSeitLetzterUI >= (5*60) then
                        ## Zeit abgelaufen, mach Dein SCREENSAVER Ding:
                        ## Resetten, falls nötig?
                        ## put the seconds into ZeitSeitLetzterUI
                      else
                    
                       ## Es ist noch Zeit, also weiterhin periodisch checken:
                       send "zeitabgelaufen" to me in 10 secs
                     end if
                    end zeitabgelaufen

                    Yo, soweit meine Ideen, ich hoffe, das hilft.
                    Bei Bedarf weiterhin hier nachfragen!

                    Gruß

                    Klaus

                  • #14446
                    hGau
                    Teilnehmer

                      Hallo Klaus,

                      viiiielen Dank für deine Vorschläge, da bin ich hier ja genau an der richtigen Adresse! 🙂

                      Ich versuche das jetzt mal umzusetzen. Bei Problemen komme ich gerne nochmal auf dein Angebot zurück. 😉

                      LG
                      Hartmut

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