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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.