Objekte per Skript erstellen

Startseite Foren Deutsches LiveCode-Forum Objekte per Skript erstellen

Ansicht von 7 Antwort-Themen
  • Autor
    Beiträge
    • #5291
      gfz
      Teilnehmer

      Hallo liebe LCerInnen!
      Ich würde gerne Objekte per Skript erstellen wie es in Haukes Buch auf Seite 228 dargestellt wird. Allerdings wollte ich das Skript etwas allgemeiner gestalten, scheitere aber am Fehler:
      „compilation error at line 5 (create: no alias or directory name supplied) near ‚pObject‘, char 13“

      Hier mein Skript:

      command createObjectMatrix pObject
         if pObject is among the words of "field button image" then
            repeat with w = 1 to 6
               repeat with d = 1 to 7
                  create pObject ("W"&w&"D"&d)
                  set the width of it to pWidth
                  set the height of it to pHeight
                  set the showBorder of it to true
               end repeat
            end repeat
         end if
      end createObjectMatrix

      Wie könnte man das bewerkstelligen – falls überhaupt möglich? Und wie könnte ich das Skript aufrufen, um die gewünschten Objekte auf einem anderen Stack bzw. einer Card erstellen zu lassen?
      liebe Grüße,
      Georg

    • #5293
      gfz
      Teilnehmer

      Okay die Kopfzeile des Commands muss natürlich auch die Parameter pWidth und pHeight enthalten.

    • #5295
      gfz
      Teilnehmer

      Okay ein Problem habe ich gelöst – hier ein kurzer Update:

      command createObjectMatrix pObject pWidth pHeight
         
         if pObject is among the words of "field button image" then
            repeat with w = 1 to 6
               repeat with d = 1 to 7
                  switch pObject
                     case "field"
                        create field ("W"&w&"D"&d)
                        break
                     case "button"
                        create button ("W"&w&"D"&d)
                        break
                     case "image"
                        create image ("W"&w&"D"&d)
                        break
                  end switch
                  
                  if (pWidth is an integer) and (pWidth > 0) then
                     set the width of it to pWidth
                  end if
                  
                  if (pHeight is an integer) and (pHeight > 0) then
                     set the height of it to pHeight
                  end if
                  set the showBorder of it to true
               end repeat
            end repeat
         end if
      end createObjectMatrix

      Offen ist nun noch die Möglichkeit dieses Skript beispielsweise in einem eigenen Stack abzuspeichern, aber nach Aufruf die gewünschten Objekte auf der Card eines anderen Stacks erstellen zu lassen. Hat jemand eine Idee, wie das klappen könnte?
      mfG,
      Georg

    • #5297
      gfz
      Teilnehmer

      Dank Dr. Google konnte ich auch dafür die Lösung finden.
      Für den Fall, dass sich jemand dafür interessiert hier das Skript:

      command createObjectMatrix pObject pWidth pHeight pM pN pStackName
         if pStackName is not empty then
            set the defaultStack to pStackName
         end if
         if pObject is among the words of "field button image" then
            if (pM is an integer) AND (pM > 0) then
               if (pN is an integer) AND (pN > 0) then
                  repeat with m = 1 to pM
                     repeat with n = 1 to pN
                        switch pObject
                           case "field"
                              create field ("fldM"&m&"N"&n)
                              break
                           case "button"
                              create button ("btnM"&m&"N"&n)
                              break
                           case "image"
                              create image ("imgM"&m&"N"&n)
                              break
                        end switch
                        
                        if (pWidth is an integer) AND (pWidth > 0) then
                           set the width of it to pWidth
                        end if
                        
                        if (pHeight is an integer) AND (pHeight > 0) then
                           set the height of it to pHeight
                        end if
                        set the showBorder of it to true
                     end repeat
                  end repeat
               end if
            end if
         end if
      end createObjectMatrix

      liebe Grüße,
      Georg

    • #5298
      Klaus Major
      Verwalter

      ## command createObjectMatrix pObject pWidth pHeight pM pN pStackName
      Im eigenen Interesse die Parameter mit Komma trennen:
      command createObjectMatrix pObject, pWidth, pHeight, pM, pN, pStackName
      Oder ist das wieder ein Glitsch der Forumsoftware? 😀

    • #5299
      gfz
      Teilnehmer

      Danke für den Hinweis Klaus. Beim Aufruf der Prozedur setze ich Beistriche zwischen den Parametern.
      Aber warum meckert die IDE nicht, wenn ich die Beistriche bei der Definition nicht setze?
      Fällt Dir noch was ein, wie die Parameter gegen falsche Werte abgesichert werden könnten/sollten?
      Grüße,
      Georg

    • #5316
      Klaus Major
      Verwalter

      HI Georg,

      Aber warum meckert die IDE nicht, wenn ich die Beistriche bei der Definition nicht setze?

      das kann ich Dir nicht sagen, aber in zukunft wird sie das sicher mal tun!
      Ich habe festgestellt, daß die Engine mit jeder Version weniger nachsichtig ist, also liebe direkt die offizielle Syntax verwenden!

      Fällt Dir noch was ein, wie die Parameter gegen falsche Werte abgesichert werden könnten/sollten?

      Hm, Du könntest abfragen, wie viel Parameter es gibt mit: paramcount(), aber ansonsten kommt es auf die Funktion/Handler an, ob und wie man die Parameter prüft.

      Gruß

      Klaus

    • #5319
      gfz
      Teilnehmer

      Klaus, ich danke dir für deine Ratschläge.
      Gruß
      Georg

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