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
              Administrator

                ## 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
                  Administrator

                    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.