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
        Administrator

          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
            Administrator

              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
                Administrator

                  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
                    Administrator

                      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
                      Administrator

                        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
                          Administrator

                            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
                                Administrator

                                  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
                                      Administrator

                                        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
                                        Administrator

                                          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
                                            Administrator

                                              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.