Lösung: Positionen der Controls für verschiedene Auflösungen

Startseite Foren Deutsches LiveCode-Forum Lösung: Positionen der Controls für verschiedene Auflösungen

Ansicht von 2 Antwort-Themen
  • Autor
    Beiträge
    • #20168
      Torsten
      Teilnehmer

        Ergänzung zum Thread https://www.livecode-blog.de/forums/topic/grroesse-stack/

        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

      • #20995
        Aldred
        Teilnehmer

          Hi Torsten,

          Danke für diese klasse Handler. Ich konnte sie zwar noch nicht testen aber ich werde das bald nachholen.
          Eine kleine Frage vornweg:

          Im Normalfall hat man ja (gerade bei Mobile Devices) folgenden Code in jedem Stack:

          on preOpenStack
          set the fullscreenmode of me to "exactFit"
          end preOpenStack

          Beist sich das dann mit deinen Handlern? Kann ich es weglassen? Muss ich in meinem Denken eine komplette Umstrukturierung vornehmen? 🙂

          Liebe Grüße
          Aldred

        • #21009
          Torsten
          Teilnehmer

            Hi Aldred,

            du scheinst das Problem mit unterschiedlichen Auflöungen bei mobilen Endgeräten zu haben.

            Da vor allem bei Android sehr viele verschiedene Geräte unterwegs sind, wöre es zu mühsam, alle möglichen Auflösungen und deren passendes Arragement einzustellen.

            Ich empfehle die Verwendung des Geometry-Tools, bei dem sich für die Controls festlegen lässt, wie sie ihre Position und Größe abhängig von der Größe des Stacks und anderer Controls verändern sollen. In früheren Versionen soll das nicht immer funktioniert haben, aber ich habe letztens gute Erfahrungen damit gemacht.

            Wenn man in den OpenCard-Handler aller Karten den Befehl “revUpdateGeometry” einfügt, werden die Positionen und Größen entsprechend eingestellt.

            Probier das mal aus 🙂

            Happy Coding
            Torsten

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