geichzeitiges ändern der Höhe von 2 Images

Startseite Foren Deutsches LiveCode-Forum geichzeitiges ändern der Höhe von 2 Images

Schlagwörter: 

Ansicht von 9 Antwort-Themen
  • Autor
    Beiträge
    • #44378
      akrages
      Teilnehmer

      Hallo und guten Abend.

      Ich habe 2 Images (.png) deren Höhe sich auf Klick eines Buttons gleichzeitig und sichtbar
      ändern soll.
      Dazu habe ich folgendes Script geschrieben:

      local myVar1, myVar2, tPosition1, tPosition2
      
      on mouseUp
         //if the height of image "Line-magenta" = 1 then
         put the height of image "Line-magenta" into myVar1
         put the height of image "Line-green" into myVar2
         put 1 into tPosition1
         put 1 into tPosition2
         
         ##lock screen
         resizeImage1 the long id of img "Line-magenta"
         wait 1 milliseconds with messages
         resizeImage2 the long id of img "Line-green"
         ##unlock screen
         //end if
      end mouseUp
      
      on resizeImage1 theImg
         put the bottom of theImg into tBalkenUnten
         if tPosition1 < myVar1 then put 1 into myVar1
         repeat until myVar1 > tPosition1
            set the height of theImg to myVar1
            wait 15 milliseconds with messages
            add 1 to myVar1
            set the bottom of theImg to tBalkenUnten
         end repeat
      end resizeImage1 theImg
      
      on resizeImage2 theImg
         put the bottom of theImg into tBalkenUnten
         if tPosition2 < myVar2 then put 1 into myVar2
         repeat until myVar2 > tPosition2
            set the height of theImg to myVar2
            wait 15 milliseconds with messages
            add 1 to myVar2
            set the bottom of theImg to tBalkenUnten
         end repeat
      end resizeImage2 theImg

      Das Problem ist, dass sich zuerst img „Line-magenta“ in der Höhe ändert und
      danach img „Line-green“.

      Wie erreiche ich, dass sich img „Line-magenta“ und img „Line-green“ gleichzeitig in der Höhe ändern?

    • #44472
      Torsten
      Teilnehmer

      Hi akrages,

      dein Code funktioniert bei mir gar nicht, die Images schrumpfen und bleiben klein.
      Ich vermute, dass sich zwei Balken gleichzeitig in der Höhe animiert verändern sollen, z.B. als „wachsende“ Balken. In der jetzigen Form wächst aber erst der eine komplett und dann der andere, es muss also komplett anders gemacht werden.

      Da ich das Problem sehr interessant fand, habe ich etwas dran gearbeitet:

      
      
      on mouseup
         
         ## Zurücksetzen der Variablen für zu vergrößernden und die bereits vergrößerten Objekte
         
         put empty into tObjects
         put empty into tMaxsizedObjectsList
         
         ## Einstellen der Verzögerung der Animationsschritte
         
         put 3 into tMilliWaits
         
         ## Stelle die Liste der zu animierenden Objekte und ihrer Endgröße zusammen 
         -- Hier ist die Stelle, an der beliebig viele Objekte (können auch Grafiken, Buttons etc. sein)
         -- angelegt werden, um sie später alle gleichzeigig zu animieren
         -- durch die Angabe als log id sind alle Objekttypen möglich.
         
         put the long id of graphic "green" & tab & 100 & cr after tObjects
         put the long id of graphic "yellow" & tab & 200 & cr after tObjects
         put the long id of graphic "red" & tab & 300 & cr after tObjects
         
         
         ## Zurücksetzen der bisherige Objekte auf Größe 1
         
         repeat for each line tObjectData in tObjects
            
            put 20 into tMinSize
            set itemdelimiter to tab
            put item 1 of tObjectData into tObject
            put the bottom of tObject into tBottom
            set the height of tObject to tMinSize
            set the bottom of tObject to tBottom
            
         end repeat
         
         ## Wiederhole solange, bis alle Objekte bis zu ihrem zugewiesenen Größe vergrößert wurden
         
         repeat
            
            ## Wiederhole für jedes Objekt in der Liste
            
            repeat for each line tObjectData in tObjects
               
               set itemdelimiter to tab
               put item 1 of tObjectData into tObject
               put item 2 of tObjectData into tMaxSize
               
               ## Verstecke das Vergrößern, um dne Eindruck zu erwecken, dass sich alle Objekte gleichzeig verändern
               
               lock screen
               
               ## Verändere die Größe es Objekts, falls es noch nicht fertig vergrößert ist
               
               if tObject is not in tMaxsizedObjectsList then
                  
                  put changeHeight(tObject,tMaxSize) into tResult
                  
                  ## Setze das Objekt auf die Liste der bereits feertig vergrößerten Objekte, wenn es "Finished" zurückmeldet
                  
                  if tResult = "Finished" then 
                     put tObject & cr after tMaxsizedObjectsList
                  end if
               end if
               
               unlock screen
               
               wait tMilliWaits milliseconds with messages
               
            end repeat
            
            if the number of lines in tMaxsizedObjectsList = the number of lines in tObjects then 
               exit repeat
            end if
            
         end repeat
         
      end mouseup
      
      --------------------------------------------------
      
      function changeHeight pObject,pMaxHeight
         
         put the height of pObject into tCurrentHeight
         put the bottom of pObject into tObjectBottom
         
         if tCurrentHeight < pMaxHeight then
            add 1 to tCurrentHeight
            set the height of pObject to tCurrentHeight
            set the bottom of pObject to tObjectBottom
         else
            return "Finished"
         end if
         
      end changeHeight
      
      --------------------------------------------------
      

      Der Code geht in einen Button und auf der Karte erwarte ich drei Grafik-Objekte, die grün, gelb und rot sind.

      Und so sieht es dann aus:
      https://www.dropbox.com/s/nzo3mr9hseaz0hk/Paralleles-Wachsen.mov?dl=0

      Happy Coding
      Torsten

    • #44491
      akrages
      Teilnehmer

      Hi Torsten,

      Warum mein Skript bei Dir nicht funzt verstehe ich nicht.

      Vielen Dank für dein Skript.
      Es funktioniert nach einer kleinen Anpassung sehr gut.
      Bis auf folgendes:
      Die Graphiken bzw. Images stehen für ein Balkendiagramm. Darum ist es wichtig, dass diese -wenn sich die Werte erhöhen- nicht jedesmal bei 0 mit dem „wachsen“ beginnen, sondern bei ihrem momentanen Wert weiterwachsen. Verstehst Du was ich meine?

      In meinem Script hatte ich dazu diese Anweisung:

         put the height of image "Line-magenta" into myVar1
         put the height of image "Line-green" into myVar2

      Wie kann ich dein Skript dahingehend anassen?

    • #44493
      akrages
      Teilnehmer

      Sorry, wer lesen kann ist klar im Vorteil!

      Habs gerade selbst herausgefunden.

    • #44501
      Torsten
      Teilnehmer

      Spitze!

      Viel Spass noch beim Coden
      Torsten

    • #44540
      Torsten
      Teilnehmer

      Hallo Gemeinde,

      ich habe die voherige changeHeight-Funktion so geschrieben, dass sie nur eine Änderung macht, wenn die neue Höhe größer als die bisherige ist. Man kann sich aber leicht vorstellen, dass sich Zahlen auch nach unten ändern können und das Objekt dann schrumpfen muss.
      Deswegen hier eine Version, welche die Größe des Objekts je nach Zielgröße um einen Pixel nach oben oder unten verändert.

      function changeHeight pObject,pFinalHeight
         
         put the height of pObject into tCurrentHeight
         put the bottom of pObject into tObjectBottom
         
         if tCurrentHeight < pFinalHeight then
            add 1 to tCurrentHeight
         else if tCurrentHeight > pFinalHeight then
            subtract 1 from tCurrentHeight
         else
            return "Finished"
         end if
         
         set the height of pObject to tCurrentHeight
         set the bottom of pObject to tObjectBottom
         
      end changeHeight
      

      Happy Coding
      Torsten

    • #44595
      akrages
      Teilnehmer

      Hallo Torsten.

      Ich habe deine letzte changeHeight-Funktion geich mal ausprobiert.
      Dabei habe ich festgestellt, dass sie nur mit positiven Ganzzahlen funktioniert.
      d.h.

         put the long id of graphic "green" & tab & 1.2345 & cr after tObjects
         put the long id of graphic "yellow" & tab & 2.6789 & cr after tObjects
         put the long id of graphic "red" & tab & 0 & cr after tObjects

      bringt die IDE dazu, dass sie sich aufhängt bzw. einfriert.
      Der Editor reagiert dann nicht mehr und auch ein sauberes beenden der Anwendung ist nicht mögich.
      Nur ein „abschießen“ von Livecode über den Taskmanager ist dann die Rettung.

      Mein Lösungsansatz:
      Da meine App Werte mit Kommazahlen (lasse ich natürlich durch punkt ersetzen) generiert,
      lasse ich diese Werte zunächst auf- bzw. abrunden.
      Und die Tage, die in der Zukunft liegen -also noch keine Werte enthalten- fange ich z.B. mit:

      If tPositionPicksMit1 >0 then
      und
      If tPositionPicksDon1 >0 then

      etc. ab. Da mein Balkendiagramm die ganze Woche anzeigt bedeutet dies, dass ich die „If-Abfrage“ für jeden Tag der Woche stellen muss.

      Es müsste doch aber auch einfacher gehen.!?!
      Ich habe schon einiges probiert, aber leider noch nicht die richtige Stelle in deinem Script gefunden.
      Wo müsste ich die Abfrage nach positiven Werten in deinem Skript einfügen?

    • #44648
      Torsten
      Teilnehmer

      Das einfachste ist, nur positive Zahlen an die Balken zu schicken 🙂
      Ich weiss jetzt nicht genug über dein Programm, um den besten Weg zu erkunden. Wenn Du magst, schick einfach den Stack an mich: torsten.holmer AT web.de

      Happy Coding
      Torsten

    • #44674
      akrages
      Teilnehmer

      Stimmt!
      Jetzt läuft alles genau so, wie es soll.
      Vielen Dank und ein großes Lob für deine Hilfe. Das gleiche geht an Klaus Major.
      Wenn einmal etwas klemmt und man nicht weiter weiß, dann seid ihr beiden immer zur Stelle.

      Gruß

      akrages

    • #44676
      Klaus Major
      Verwalter

      Stets zu Diensten! 🙂

      Ich war eine Woche weg, daher habe ich den Fred jetzt erst gesehen.
      Schön, daß Du es hinbekommen hast!

      Bitte auch das funktionierende Skript posten, danke!

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