Grröße Stack

Startseite Foren Deutsches LiveCode-Forum Grröße Stack

Schlagwörter: 

Ansicht von 11 Antwort-Themen
  • Autor
    Beiträge
    • #20089
      Oliver122
      Teilnehmer

        Hallo zusammen,

        ich habe mal wieder eine Frage. Ich programmiere gerade an einem Win 10 Rechner. Die Größe ist an dem 24 Zoll Bildschirm angepasst. Ich habe das Programm im Endwicklungsmodus und als Sandalone Version, auf meinen Laptop laufen lassen. Dieser ist auch Win 10, hat aber einen kleineren Bildschirm.

        Es ist also nicht alles drauf. Wie kann ich das anpassen?
        Ich habe nur eine Idee, die leider nicht funktioniert. Ich habe ein kleines Dropdowm Menü mit verschiedenen
        anwählbaren Größen und folgendes Skript zum aktivieren, bzw. auswählen.

         on mouseDown
           if the label of me is "640x480" then
              set the width of card "kosten" to "640"
              set the height of card "kosten" to "480"
           end if
        end mouseDown

        Die folgende Fehlermeldung kommt als Laufzeitfehler:

        button “zoll”: execution error at line n/a (Object: can’t set this property)

        Kann mir einer von euch helfen?

      • #20091
        Klaus Major
        Administrator

          Hi Oliver,

          CARDS haben diese Property (height/width) eben nicht, sondern nur der Stack! 🙂
          Stackgröße = Kartengröße, also so klappts dann:

          on mouseDown
             if the label of me is "640x480" then
                ## Zahlen benötigen keine Gänsefüßchen!
                set the width of THIS STACK to 640
                set the height of THIS STACK to 480
             end if
          end mouseDown

          Falls Dein Dropdownmenü noch weitere “menutitems” enthalten soll, empfehle ich,
          die “on menupick” Message zu skripten.

          Gruß

          Klaus

        • #20092
          Oliver122
          Teilnehmer

            Hallo Klaus,

            danke für die Hilfe
            Die Größe ändert er mit deinem Skript aber…..

            1.Leider reagiert er bei on mousepick nicht.
            Es kommt keine Fehlermeldung, es passiert aber auch nichts.
            Mit on mouseup ist es zwar umständlich aber geht.

            2.Die Verkleinerung funktioniert dann, nur was außerhalb des Bildes ist, ist “weg”
            Ich habe gehofft, dass alles auf diesen kleineren Bildschirm “zusammengerafft” wird.
            Leider passiert das nicht und man kann auch nicht scrollen.

            Wie kann ich das denn bewerkstelligen? Ich wollte eigentlich nur, dass die Größe angepasst wird. Wenn nicht automatisch, dann wenigstens mit dem Button.

            Danke im Voraus

          • #20093
            Klaus Major
            Administrator

              1.Leider reagiert er bei on mousepick nicht.
              Es kommt keine Fehlermeldung, es passiert aber auch nichts.

              Darum schrieb ich ja auch ON MENUpick! 😎

              on menupick the_selected_item
                switch the_selected_item
                 case "640x480"
                   set the width of THIS STACK to 640
                   set the height of THIS STACK to 480
                 break
                 case "1024x768"
                  set the width of THIS STACK to 640
                  set the height of THIS STACK to 480
                 break
                 ## etc. für weitere Auflösungen
                end switch
              end menupick

              Oder, ganz clever und kurz, wenn Du immer ein x als Trenner für die Größen nimmst:

              on menupick the_selected_item
                 set itemdel to "x"
                 set the width of THIS STACK to item 1 of the_selected_item
                 set the height of THIS STACK to item 2 of the_selected_item
              end menupick

              🙂

              Aber leider ändert das wirklich nur die Größe des Stacks!
              Alles Weitere (Skalieren/Bewegen der Objekte auf der Karte) obliegt Dir, dem Entwickler!

              Frohe Ostern! 🙂

            • #20094
              Oliver122
              Teilnehmer

                OK danke

                wer lesen kann ist klar im Vorteil. Natürlich menuPick.
                Gibt es eigentlich eine Liste von Befehlen mit kurzer Erklärung, in Deutsch?

                Vieles wie MenuPick setzte ich nicht ein, weil ich es nicht kenne.

                Dein Skript ist sehr gut aber das Problem beleibt natürlich.

                Blöd, weil ich im Moment keine Idee habe wie ich das lösen kann.

              • #20095
                Klaus Major
                Administrator

                  Gibt es eigentlich eine Liste von Befehlen mit kurzer Erklärung, in Deutsch?
                  Vieles wie MenuPick setzte ich nicht ein, weil ich es nicht kenne.

                  Nee, soweit ich weiß nicht…
                  Aber hier gibt es ein paar Stack, um die “Basics” von LC kennenzulernen:
                  Online Scripting Conferences
                  Ist allerdings in Englisch.
                  Aber Du darfst mich gerne alles Fragen! 😀

                  Dein Skript ist sehr gut aber das Problem beleibt natürlich.
                  Blöd, weil ich im Moment keine Idee habe wie ich das lösen kann.

                  Ich habe so etwas früher schon einmal gemacht, ist aber aufwendig und viel Handarbeit.
                  Wenn ich Die Zeit finde, schreibe ich mal, wie ich es gemacht habe.
                  Im Prinzip habe ich zunächst das “größte” Layout genommen und das RECT jedes Objektes auf der Karte in einer Custom Property dieses Objektes gespeichert.

                  Dann das kleinere Layout manuell entsprechend angepasst -> Größe und Posititon der Objekte und dann wieder diese neuen RECTS der Objekte wie oben abgespeichert.

                  Dann kann man diese Werte wieder zuordnen und somit das komplette Layout ändern.
                  Soweit klar, zumindest im Prinzip?

                • #20096
                  Oliver122
                  Teilnehmer

                    Danke für die Seite. Gucke ich mir mal an.

                    Dein Prinzip ist mir grundsätzlich auch klar. Ich hatte schon viel Arbeit befürchtet.
                    Wenn du das Skript mal schickst wäre ich sehr dankbar.
                    Solange versuche ich mal mein Glück.

                    Danke nochmal

                  • #20097
                    Klaus Major
                    Administrator

                      Ich werde über Ostern mal einen kleinen Stack zusammenzimmern! 🙂

                      Auf meiner Website habe ich auch ein paar Beispiele in deutsch.
                      Sind uralt, die Endung ist noch .mc
                      Aendere sie um in .rev, dann tauchen sie auch im Oeffnen-Dialog von LC auf.
                      https://major-k.de/xtalk.html

                    • #20159
                      Torsten
                      Teilnehmer

                        Hi Oliver und Klaus,

                        aufgrund von Klaus Vorschlag mit RECT habe ich habe gestern zwei Handler gebaut, die das Problem lösen:

                        Hier ist der Code, der in das Stack-Skript kopiert wird:

                        
                        -------------------------------------------------------------------
                        -- Diese Konstante bestimmt den Namens-Prefix für die 
                        -- Stack-Properties. Dieser Name ist im Prinzip beliebig
                        -- und kann nach eigenem Ermessen/Geschmack geändert werden.
                        
                        constant kSizePrefix = "Sizeposition_"
                        
                        -------------------------------------------------------------------
                        
                        command save_control_positions
                           
                           ## Ermittlung der aktuellen Größe des Fensters, um den Größenparameter zu setzen
                           
                           put the width of this stack & "_" & the height of this stack into tActualSize
                           
                           ## Name für die Größen-Property erstellen, z.B. "Sizeposition_800_400"
                           
                           put kSizePrefix & tActualSize into tSizeProperty
                           
                           ## Speicherung der aktuellen Position und Größe jedes Bedienelements /Control) 
                           
                           repeat with i = 1 to the number of controls of the current card
                              
                              set the tSizeProperty of control i to the rect of control i
                              
                           end repeat
                           
                        end save_control_positions
                        
                        -------------------------------------------------------------------
                        
                        command set_control_positions pSize
                           
                           put kSizePrefix & pSize into tSizeProperty
                           put the tSizeProperty of control 1 into tNewSize
                           
                           if tNewSize is empty then   
                              
                              put the customKeys of control 1 into tCustomProperties
                              filter lines of tCustomProperties with kSizePrefix & "*"
                              replace kSizePrefix with empty in tCustomProperties
                              
                              if tCustomProperties is empty then
                                 
                                 answer "Keine Auflösungen verfügbar!"
                                 exit set_control_positions
                                 
                              else 
                                 
                                 put empty into tButtonListe
                                 repeat for each line i in tCustomProperties
                                    
                                    put quote & i & quote & " OR " after tButtonListe
                                    
                                 end repeat 
                                 
                                 put "Cancel" after tButtonListe
                                 put "answer " & quote & "Folgende Auflösungen sind verfügbar:" & quote && " with" && tButtonListe into tAuswahl
                                 do tAuswahl
                                 
                                 if it is "Cancel" then 
                                    exit set_control_positions
                                 else
                                    set_control_positions it
                                 end if
                                 
                              end if
                              
                           else
                              
                              put the loc of this stack into tStackLoc
                              set itemdelimiter to "_" 
                              set the width of this stack to item 1 of pSize
                              set the height of this stack to item 2 of pSize
                              set the loc of this stack to tStackLoc
                              
                              repeat with i = 1 to the number of controls of the current card
                                 
                                 set the rect of control i to the tSizeProperty of control i 
                                 
                              end repeat
                              
                           end if
                           
                           
                        end set_control_positions
                        
                        -------------------------------------------------------------------
                        

                        Freue mich auch Kommentare!

                        LG
                        Torsten

                      • #20167
                        Torsten
                        Teilnehmer

                          Hi Oliver und Klaus,

                          aufgrund von Klaus Vorschlag mit RECT habe ich habe gestern zwei Handler gebaut, die das Problem lösen:

                          Ich habe dazu auch ein kleines Screenvideo gemacht, in dem erklärt wird, wie die Handler eingesetzt werden:

                          Hier ist der Code, der in das Stack-Skript kopiert wird:

                          
                          -------------------------------------------------------------------
                          -- Diese Konstante bestimmt den Namens-Prefix für die 
                          -- Stack-Properties. Dieser Name ist im Prinzip beliebig
                          -- und kann nach eigenem Ermessen/Geschmack geändert werden.
                          
                          constant kSizePrefix = "Sizeposition_"
                          
                          -------------------------------------------------------------------
                          
                          command save_control_positions
                             
                             ## Ermittlung der aktuellen Größe des Fensters, um den Größenparameter zu setzen
                             
                             put the width of this stack & "_" & the height of this stack into tActualSize
                             
                             ## Name für die Größen-Property erstellen, z.B. "Sizeposition_800_400"
                             
                             put kSizePrefix & tActualSize into tSizeProperty
                             
                             ## Speicherung der aktuellen Position und Größe jedes Bedienelements /Control) 
                             
                             repeat with i = 1 to the number of controls of the current card
                                
                                set the tSizeProperty of control i to the rect of control i
                                
                             end repeat
                             
                          end save_control_positions
                          
                          -------------------------------------------------------------------
                          
                          command set_control_positions pSize
                             
                             put kSizePrefix & pSize into tSizeProperty
                             put the tSizeProperty of control 1 into tNewSize
                             
                             if tNewSize is empty then   
                                
                                put the customKeys of control 1 into tCustomProperties
                                filter lines of tCustomProperties with kSizePrefix & "*"
                                replace kSizePrefix with empty in tCustomProperties
                                
                                if tCustomProperties is empty then
                                   
                                   answer "Keine Auflösungen verfügbar!"
                                   exit set_control_positions
                                   
                                else 
                                   
                                   put empty into tButtonListe
                                   repeat for each line i in tCustomProperties
                                      
                                      put quote & i & quote & " OR " after tButtonListe
                                      
                                   end repeat 
                                   
                                   put "Cancel" after tButtonListe
                                   put "answer " & quote & "Folgende Auflösungen sind verfügbar:" & quote && " with" && tButtonListe into tAuswahl
                                   do tAuswahl
                                   
                                   if it is "Cancel" then 
                                      exit set_control_positions
                                   else
                                      set_control_positions it
                                   end if
                                   
                                end if
                                
                             else
                                
                                put the loc of this stack into tStackLoc
                                set itemdelimiter to "_" 
                                set the width of this stack to item 1 of pSize
                                set the height of this stack to item 2 of pSize
                                set the loc of this stack to tStackLoc
                                
                                repeat with i = 1 to the number of controls of the current card
                                   
                                   set the rect of control i to the tSizeProperty of control i 
                                   
                                end repeat
                                
                             end if
                             
                             
                          end set_control_positions
                          
                          -------------------------------------------------------------------
                          

                          Freue mich auch Kommentare!

                          LG
                          Torsten

                        • #20184
                          Torsten
                          Teilnehmer

                            Hi,

                            ich habe eine Lösung dafür gebaut und hier gibt es ein Video und den Source Code dazu:

                            LG
                            Torsten

                            • #21599
                              Torsten
                              Teilnehmer

                                Hab doch glatt vergessen, den Code hier ins Forum zu stellen 🙂

                                Ich benutze den Code übrigens gerade selber, weil ich eine Standalone mache und feststelle, dass diese auf Rechnern laufen muss, die eine kleinere Auflösung als meine Mühle haben. Ich will aber nicht immer mit der kleineren Variante arbeiten müssen. So kann ich bequem zwischen verschiedenenen Auflösungen umschalten.

                                LG
                                Torsten

                                -------------------------------------------------------------------
                                -- Diese Konstante bestimmt den Namens-Prefix für die 
                                -- Stack-Properties. Dieser Name ist im Prinzip beliebig
                                -- und kann nach eigenem Ermessen/Geschmack geändert werden.
                                
                                constant kSizePrefix = "Sizeposition_"
                                
                                -------------------------------------------------------------------
                                
                                command save_control_positions
                                   
                                   ## Ermittlung der aktuellen Größe des Fensters, um den Größenparameter zu setzen
                                   
                                   put the width of this stack & "_" & the height of this stack into tActualSize
                                   
                                   ## Name für die Größen-Property erstellen, z.B. "Sizeposition_800_400"
                                   
                                   put kSizePrefix & tActualSize into tSizeProperty
                                   
                                   ## Speicherung der aktuellen Position und Größe jedes Bedienelements /Control) 
                                   
                                   repeat with i = 1 to the number of controls of the current card
                                      
                                      set the tSizeProperty of control i to the rect of control i
                                      
                                   end repeat
                                   
                                end save_control_positions
                                
                                -------------------------------------------------------------------
                                
                                command set_control_positions pSize
                                   
                                   put kSizePrefix & pSize into tSizeProperty
                                   put the tSizeProperty of control 1 into tNewSize
                                   
                                   if tNewSize is empty then   
                                      
                                      put the customKeys of control 1 into tCustomProperties
                                      filter lines of tCustomProperties with kSizePrefix & "*"
                                      replace kSizePrefix with empty in tCustomProperties
                                      
                                      if tCustomProperties is empty then
                                         
                                         answer "Keine Auflösungen verfügbar!"
                                         exit set_control_positions
                                         
                                      else 
                                         
                                         put empty into tButtonListe
                                         repeat for each line i in tCustomProperties
                                            
                                            put quote & i & quote & " OR " after tButtonListe
                                            
                                         end repeat 
                                         
                                         put "Cancel" after tButtonListe
                                         put "answer " & quote & "Folgende Auflösungen sind verfügbar:" & quote && " with" && tButtonListe into tAuswahl
                                         do tAuswahl
                                         
                                         if it is "Cancel" then 
                                            exit set_control_positions
                                         else
                                            set_control_positions it
                                         end if
                                         
                                      end if
                                      
                                   else
                                      
                                      put the loc of this stack into tStackLoc
                                      set itemdelimiter to "_" 
                                      set the width of this stack to item 1 of pSize
                                      set the height of this stack to item 2 of pSize
                                      set the loc of this stack to tStackLoc
                                      
                                      repeat with i = 1 to the number of controls of the current card
                                         
                                         set the rect of control i to the tSizeProperty of control i 
                                         
                                      end repeat
                                      
                                   end if
                                   
                                   
                                end set_control_positions
                                
                                -------------------------------------------------------------------
                                
                            • #21600
                              Axwald
                              Teilnehmer

                                Hallo,
                                wenn Du damit leben kannst, daß bei einem zu kleinen Bildschirm in den Vollbild-Modus geschalten wird, geht es auch so:

                                on preOpenStack
                                   --  Das gehört in das Skript der ersten Karte des Stacks!
                                   --  (sonst läuft es jedesmal, wenn irgendein Stack geöffnet wird ...) 
                                   get the working screenRect
                                   --  it: 0,0,800,570 - die Koordinaten des aktiven Bildschirms
                                   --  (der hat hier 800x600, abzüglich 30 für Taskleiste/ Menü)
                                   put (item 3 of it - item 1 of it) & comma & (item 4 of it - item 2 of it) into myScreen
                                   --  myScreen: 800,570 - verfügbarer Platz, übersetzt
                                   
                                   put the width of this stack into myWidth  --  1024 - die Breite des Stack-Fensters
                                   put the height of this stack into myHeight  --  768 - die Höhe des Stack-Fensters
                                   
                                   if (item 1 of myScreen < myWidth) OR (item 2 of myScreen < myHeight) then
                                      --  wenn Fenster zu breit oder zu hoch:
                                      set the fullscreenmode of this stack to "letterbox"
                                      --  dann: skalieren ("showall" gibt das gleiche Ergebnnis)
                                      set the fullscreen of this stack to true
                                      --  Skalierung anwenden durch Anwenden des Fullscreen-Modus!
                                   end if
                                end preOpenStack

                                Viel Spaß!

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