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 http://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.