Bleibender Dark Mode

Startseite Foren Deutsches LiveCode-Forum Bleibender Dark Mode

Ansicht von 14 Antwort-Themen
  • Autor
    Beiträge
    • #19774
      BestRazer
      Teilnehmer

      Hallo,

      ich habe in meiner App einen Dark und einen Light Mode.
      Bis jetzt ist es allerdings so, dass man immer beim starten der App den Schalter erneut umlegen muss, damit der Dark mode aktiviert wird. Wie kann ich es machen, dass sich die App merkt, ob sie beim letzten Schließen im Dark- oder Light mode war?

    • #19778
      Klaus Major
      Verwalter

      Das hatten wir doch schon einmal in ähnlicher Form hier:
      https://www.livecode-blog.de/forums/topic/beim-ersten-starten/
      Diese Lösung gilt auch für Dein aktuelle Problem!

    • #19782
      BestRazer
      Teilnehmer

      Ich habe es auch so versucht, bei mir ist das raus gekommen:
      Skript im Schalter:

      if the highlight of me then
            put specialfolderpath("documents") & "/dark_mode" into darkmode
            put "dark" into url("file:" & darkmode)
            
         else
            put specialfolderpath("documents") & "/dark_mode" into darkmode
            put "light" into url("file:" & darkmode)
         end if

      Skript im Stack:

      on startup pMode
         if darkmode = "dark"   then
            set the highlight of widget "dark" to "true"
         end if
         if darkmode = "light"   then
            set the highlight of widget "dark" to "false"
         end if
      end startup

      Das funktioniert aber nicht.

    • #19783
      Klaus Major
      Verwalter

      Du musst die Datei aber auch irgendwann mal wieder einlesen und darauf reagieren!
      Das ist doch wirklich kaum etwas anderes als bei Deinen vorherigen Fragen!?

      Hinweis:
      Das kann auch nciht funktionieren!
      „startup“ ist tatsächlich ein reserviertes Wort in LC, sieht man auch im Skript Editor, das Wort wird eingefärbt!

      Diese Nachricht „on startup“ wird aber nur beim Starten der späteren RUNTIME gesendet, in der IDE aber nicht.

      Ausserdem hat STARTUP keinen Parameter, und schon gar nicht Deine gespeicherte Variable, wo soll die denn herkommen?

      Und Du solltest Deine Variable darkmode als GLOBAL definieren, damit von überall darauf zugegriffen werden kann!

      Mach es so:

      ...
      ## Einmal reicht, Tipparbeit sparen!:
      put specialfolderpath("documents") & "/dark_mode" into tDatei
      if the highlight of me then
            put "dark" into darkmode     
      else
            put "light" into darkmode
      end if
      ## Jetzt erst wegschreiben:
      put darkmode into url("file:" & tDatei)
      ...

      Dann im Stackskript:

      global darkmode
      
      on OPENSTACK
        ## Zuerst die Datei einlesen
        put specialfolderpath("documents") & "/dark_mode" into tFile
      
        ## Noch keine Datei vorhanden -> auf DEFAULT setzen:
        if there is not a file tFile then
           put "Dein Defaultwert für Darkmode hier" into derModus
        else
           put url ("file:" & tFile) into derModus
        end if
      
        ## Weiterer Trick, da LC zuerst alles in Klammern auflöst:
        set the highlight of widget "dark" to (darkmode = "dark")
        ## Bitte mal auf der zunge zergehen lassen.
        ## Diese Logik ist essentiell fürs Programmieren!
      
        ## Siehe oben, Mr. Boole und seine Logik ist unser Freund!
        ##if darkmode = "dark" then
        ##   set the highlight of widget "dark" to "true"
        ##else
        ##   set the highlight of widget "dark" to "false"
        ##end if
      end openstack

      Und jetzt bitte mit dem alten Thread vergleichen und sehen, daß es hier im Prinzip keinen Unterschied gibt! Und das dann bitte auch für die Zukunft verstehen und merken! 😎

      Gruß

      Klaus

    • #19899
      BestRazer
      Teilnehmer

      Hallo, danke für die schnelle Antwort. Ich habe es so versucht.
      Leider hat es nicht funktioniert. Ich habe verschiedene Änderungen am Code vorgenommen, wie z.B.
      on preOpenstack statt on openstack verwendet. Ich habe auch den Code statt in den Stack in die Card getan, es hat aber immer noch nicht funktioniert.

      Woran könnte das liegen?

      Vielen dank, Arthur.

    • #19900
      Klaus Major
      Verwalter

      Bitte den Code posten, ich kann nicht hellsehen! 😎

      • #19902
        BestRazer
        Teilnehmer

        Stack:

        global darkmode
        
        on openstack
           ## Zuerst die Datei einlesen
           put specialfolderpath("documents") & "/dark_mode" into tFile
           
           ## Noch keine Datei vorhanden -> auf DEFAULT setzen:
           if there is not a file tFile then
              put "false" into derModus
           else
              put url ("file:" & tFile) into derModus
           end if
           
           ## Weiterer Trick, da LC zuerst alles in Klammern auflöst:
           set the highlight of widget "dark" to (darkmode = "dark")
           ## Bitte mal auf der zunge zergehen lassen.
           ## Diese Logik ist essentiell fürs Programmieren!
           
           ## Siehe oben, Mr. Boole und seine Logik ist unser Freund!
           ##if darkmode = "dark" then
           ##   set the highlight of widget "dark" to "true"
           ##else
           ##   set the highlight of widget "dark" to "false"
           ##end if
        end openstack

        Schalter:

        on hiliteChanged
           if the highlight of me then
              
              
              set the backgroundColor of card "VP App" to "#000000"
              set the backgroundColor of field "Field" to "#000000"
              set the foregroundColor of field "Field" to "#ffffff"
              set the backgroundColor of field "infos" to "#000000"
              set the foregroundColor of field "infos" to "#ffffff"
              
           else
              
              
              set the backgroundColor of card "VP App" to "#ffffff"
              set the backgroundColor of field "Field" to "#ffffff"
              set the foregroundColor of field "Field" to "#000000"
              set the backgroundColor of field "infos" to "#ffffff"
              set the foregroundColor of field "infos" to "#000000"
              
           end if   
           
        
           
           ## Einmal reicht, Tipparbeit sparen!:
           put specialfolderpath("documents") & "/dark_mode" into tDatei
           if the highlight of me then
              put "dark" into darkmode     
           else
              put "light" into darkmode
           end if
           ## Jetzt erst wegschreiben:
           put darkmode into url("file:" & tDatei)
           
           
        end hiliteChanged
        
        
    • #19903
      Klaus Major
      Verwalter

      Hm, falls Dein Widget nicht auf der ersten Karte liegt, solltest Du das
      im Stackskript genauer beschreiben:

      ...
      set the hilite of widget "dark" OF CD X to (darkmode = "dark")
      ...

      Der Code an sich ist völlig korrekt!

      Hinweis:
      Ein Brite wird sicherlich bei der Schreibweise „hilite“ schaudern,
      aber LC hat amerikanische Wurzeln, daher ist das erlaubt (und auch
      wieder weniger zu tippen). 🙂

    • #19905
      Klaus Major
      Verwalter

      OHA! Sorry, mein Fehler, habe das gerade erst gesehen:

      ...
      if there is not a file tFile then
        put "false" into derModus
      else
        put url ("file:" & tFile) into derModus
      end if
         
        ## Weiterer Trick, da LC zuerst alles in Klammern auflöst:
        ## set the hilite of widget "dark" to (darkmode = "dark")
      
        ## Die verwendete Variable heisst aber derModus!
        ## So ist es korrekt:
        set the hilite of widget "dark" to (derModus = "dark")
      ...

      Getestet und funktioniert! 🙂

      • #19912
        BestRazer
        Teilnehmer

        Vielen, vielen Dank für ihre Hilfe!
        Es funktioniert jetzt, dass der Schalter an der richtigen Position ist.
        Allerdings wir dadurch, warum auch immer die Hintergrundfarbe nicht geändert.
        Wenn ich ihn manuell umschalte aber schon.
        Warum?
        Was kann ich tun?

        Vielen Dank, Arthur

    • #19913
      Klaus Major
      Verwalter

      Ach ja, das ändert erst einmal nur das Aussehen.
      Du kannst das Widget aber dazu zwingen, sein Skript abzuarbeiten mit:

      ...
      set the hilite of widget "dark" to (derModus = "dark")
      send "hilitechanged" to widget "dark"
      ...

      Das ist wie selber dran gezupft! 😀

      • #19915
        BestRazer
        Teilnehmer

        Vielen Dank, endlich funktionierts!

      • #20553
        BestRazer
        Teilnehmer

        Hallo, ich melde mich noch mal.
        Da es in LC 9.6 DP 4 eine Erkennung des System Dark Modes gibt, habe ich jetzt ein Menue mit 3 Radio Buttons erstellt und sie in eine Gruppe gesteckt. Dann habe ich den Code aus dem Schalter in die jeweiligen Radio buttons gesteckt und Jeweils noch put "dark" into darkmode oder put "light" into darkmode und put darkmode into url("file:" & tDatei) wie du es mir schon gesagt hast. So funktioniert es aber trotzdem nicht mehr, dass der eingestellte Modus beim oeffnen immer noch der gleiche ist wie beim schließen.
        Wie kann ich das machen?

    • #20557
      Klaus Major
      Verwalter

      Bitte zeig Deine Skripte!
      Das lief doch alles schon…

      • #20559
        BestRazer
        Teilnehmer

        Stack: `on openstack
        ## Zuerst die Datei einlesen
        put specialfolderpath(„documents“) & „/dark_mode“ into tFile

        ## Noch keine Datei vorhanden -> auf DEFAULT setzen:
        if there is not a file tFile then
        put „false“ into derModus
        else
        put url („file:“ & tFile) into derModus
        end if

        ## Weiterer Trick, da LC zuerst alles in Klammern auflöst:
        set the hilite of widget „dark“ to (derModus = „dark“)
        send „hilitechanged“ to widget „dark“
        ## Bitte mal auf der zunge zergehen lassen.
        ## Diese Logik ist essentiell fürs Programmieren!

        ## Siehe oben, Mr. Boole und seine Logik ist unser Freund!
        ##if darkmode = „dark“ then
        ## set the highlight of widget „dark“ to „true“
        ##else
        ## set the highlight of widget „dark“ to „false“
        ##end if
        #Danke an Klaus Major!
        end openstack`
        Radio Button „Dunkel“:

        global state
        global darkmode
        on mouseUp pButtonNumber
           set the backgroundColor of card "VP App" of stack "VP App" to "#000000"
           set the backgroundColor of field "Überschrift" of stack "VP App" to "#000000"
           set the foregroundColor of field "Überschrift" of stack "VP App" to "#ffffff"
           set the backgroundColor of field "infos" of stack "VP App" to "#000000"
           set the foregroundColor of field "infos" of stack "VP App" to "#ffffff"
           set the backColor of widget "Navigation Bar" of stack "VP App" to "Gray50"
           set the foreColor of widget "Navigation Bar" of stack "VP App" to "#D3D3D3"
           set the hiliteColor of widget "Navigation Bar" of stack "VP App" to "white"
           put "dark" into darkmode
           put "dark" into state
           put darkmode into url("file:" & tDatei)
           
        end mouseUp
        

        Radio Button „Hell“:

        global state
        global darkmode
        on mouseUp pButtonNumber
           set the backgroundColor of card "VP App" of stack "VP App" to "#ffffff"
           set the backgroundColor of field "Überschrift" of stack "VP App" to "#ffffff"
           set the foregroundColor of field "Überschrift" of stack "VP App" to "#000000"
           set the backgroundColor of field "infos" of stack "VP App" to "#ffffff"
           set the foregroundColor of field "infos" of stack "VP App" to "#000000"
           set the backColor of widget "Navigation Bar" of stack "VP App" to "black"
           set the foreColor of widget "Navigation Bar" of stack "VP App" to "white"
           set the hiliteColor of widget "Navigation Bar" of stack "VP App" to "blue"
           put "light" into darkmode
           put "light" into state
           put darkmode into url("file:" & tDatei)   
           
        end mouseUp
        

        Ich weiß, das hatten wir schon mal, ich kriege es aber trotzdem nicht hin.

    • #20560
      BestRazer
      Teilnehmer

      Stack:

      global darkmode
      
      on openstack
         ## Zuerst die Datei einlesen
         put specialfolderpath("documents") & "/dark_mode" into tFile
         
         ## Noch keine Datei vorhanden -> auf DEFAULT setzen:
         if there is not a file tFile then
            put "false" into derModus
         else
            put url ("file:" & tFile) into derModus
         end if
         
         ## Weiterer Trick, da LC zuerst alles in Klammern auflöst:
         set the hilite of widget "dark" to (derModus = "dark")
         send "hilitechanged" to widget "dark"   
         ## Bitte mal auf der zunge zergehen lassen.
         ## Diese Logik ist essentiell fürs Programmieren!
         
         ## Siehe oben, Mr. Boole und seine Logik ist unser Freund!
         ##if darkmode = "dark" then
         ##   set the highlight of widget "dark" to "true"
         ##else
         ##   set the highlight of widget "dark" to "false"
         ##end if
         #Danke an Klaus Major!
      end openstack
      on openstack
         set the hilite of widget "dark" to "false"
         send "hilitechanged" to widget "dark"
         wait 2 seconds
         if state = "dark" then
            hide image "uzw"
            show image "unterrichtszeiten"
         else
            hide image "unterrichtszeiten"
            show image "uzw"
         end if
      end openstack
      

      Radio button „Dunkel“:

      global state
      global darkmode
      on mouseUp pButtonNumber
         set the backgroundColor of card "VP App" of stack "VP App" to "#000000"
         set the backgroundColor of field "Überschrift" of stack "VP App" to "#000000"
         set the foregroundColor of field "Überschrift" of stack "VP App" to "#ffffff"
         set the backgroundColor of field "infos" of stack "VP App" to "#000000"
         set the foregroundColor of field "infos" of stack "VP App" to "#ffffff"
         set the backColor of widget "Navigation Bar" of stack "VP App" to "Gray50"
         set the foreColor of widget "Navigation Bar" of stack "VP App" to "#D3D3D3"
         set the hiliteColor of widget "Navigation Bar" of stack "VP App" to "white"
         put "dark" into darkmode
         put "dark" into state
         put darkmode into url("file:" & tDatei)
         
      end mouseUp
      

      Radio button „Hell“:

      global state
      global darkmode
      on mouseUp pButtonNumber
         set the backgroundColor of card "VP App" of stack "VP App" to "#ffffff"
         set the backgroundColor of field "Überschrift" of stack "VP App" to "#ffffff"
         set the foregroundColor of field "Überschrift" of stack "VP App" to "#000000"
         set the backgroundColor of field "infos" of stack "VP App" to "#ffffff"
         set the foregroundColor of field "infos" of stack "VP App" to "#000000"
         set the backColor of widget "Navigation Bar" of stack "VP App" to "black"
         set the foreColor of widget "Navigation Bar" of stack "VP App" to "white"
         set the hiliteColor of widget "Navigation Bar" of stack "VP App" to "blue"
         put "light" into darkmode
         put "light" into state
         put darkmode into url("file:" & tDatei)   
         
      end mouseUp
      
    • #20561
      Klaus Major
      Verwalter

      Hallo Arthur,

      Du hast 2 (ZWEI) openstack Handler!?

      In einem solchen Fall nimmt LC immer nur den ERSTEN Handler eines Names,
      der zweite wird also nicht abgearbeitet! 😎

      Der zweite setzt aber auch noch einmal das HILITE des Widgets und sendet „hilitechanged“!
      Sicher, daß sich das nicht gegeneinander aufheben wird?

      Da musst Du nochmal ran!

      Gruß

      Klaus

    • #20563
      Klaus Major
      Verwalter

      Noch was:

      ...
      put "dark" into darkmode
      put "dark" into state
      ...
      put "light" into darkmode
      put "light" into state
      ...

      Denkst Du nicht, daß EINE Variable ausreicht, um sich den aktuellen „darkmode“ zu merken?

    • #20594
      BestRazer
      Teilnehmer

      Danke, ich habe es jetzt hinbekommen. Jetzt habe ich aber das Problem, dass ich ein Bild auf der Startseite habe, dass im Dark Mode erscheint und eins, dass im Light Mode erscheint und ein Textfeld, dass im Dark Mode schwarzen Hintergrund und weiße Schrift hat und anders herum. Ich habe auch schon folgende line hinzugefügt:

         if derModus = "true" then
            send mouseUp to button "Dunkel"
      <strong>      set the backgroundColor of field "Time" of stack "VP App" to "#000000"
            set the foregroundColor of field "Time" of stack "VP App" to "#ffffff"
            hide image "uzw"
            show image "unterrichtszeiten"</strong>
         else
            send mouseUp to button "Hell"
      <strong>      set the backgroundColor of field "Time" of stack "VP App" to "#ffffff"
            set the foregroundColor of field "Time" of stack "VP App" to "#000000"
            hide image "unterrichtszeiten"
            show image "uzw"</strong>
         end if

      Es funktioniert aber trotzdem nicht. Obwohl es im openstack Handler ist. Woran liegt das?

    • #20596
      Klaus Major
      Verwalter

      Deine Variablen heissen darkmode und state.
      Aber nicht dermodus, das hatten wir hier oben schon einmal!

      Und wie Du siehst, funktionieren Formatierungen wie FET, KURSIV etc. nicht in eingefügten Skripten.

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