moai.CreateObject(xml$[, parent$])
moai.CreateObject()
beendet ist, wird das neu erstellte MOAI-Objekt nicht an ein
übergeordnetes Objekt angefügt und befindet sich losgelöst (isoliert)
von Ihrem Application-Objekt, das mit moai.CreateApp()
erstellt wurde. Um diesen lösgelösten Zustand aufzuheben, müssen
Sie das Objekt zuerst an ein übergeordnetes Objekt anhängen,
bei dem es sich entweder um ein Gruppen-, ein Menü- oder ein
Application-Objekt handeln kann. Wenn das neu zugewiesene MOAI-Objekt
ein Fensterobjekt ist, müssen Sie es an das Application-Objekt
anfügen, indem Sie die Methode Application.AddWindow
verwenden. Um Menüobjekte anzuhängen, müssen Sie die Methoden
Menubar.Prepend, Menubar.Append, Menubar.Insert,
Menu.Prepend, Menu.Append oder Menu.Insert
verwenden. Alle anderen Objekte können mit den Gruppenmethoden
Group.Prepend, Group.Append und Group.Insert
angefügt werden.
Für die meisten MOAI-Klassen müssen Sie im zweiten Parameter
parent$
ein übergeordnetes Objekt angeben. RapaGUI
wird das neue Objekt nicht an das übergeordnete Objekt anhängen,
aber es muss immer noch das übergeordnete Objekt kennen, um
bestimmte Einstellungen festlegen zu können. Die einzigen MOAI-Klassen,
für die Sie kein übergeordnetes Objekt angeben müssen, sind
die folgenden:
Bei allen anderen MOAI-Klassen müssen Sie den Identifikator des übergeordneten Objekts angeben.
Normalerweise müssen Sie nur den Identifikator des Fensters
übergeben, an das Sie das MOAI-Objekt als übergeordnetes Objekt
anhängen möchten. Es gibt eine Ausnahme: Wenn Sie planen, das
MOAI-Objekt einer Gruppe mit einem Rahmen hinzuzufügen, d.h.
eine Instanz von der Group-Klasse (Gruppen) mit Group.Frame
auf True
gesetzt, dann müssen Sie dieses Gruppenobjekt als übergeordnetes
Objekt übergeben. Beachten Sie, dass dies nur für Gruppen mit
einem Rahmen gilt. Wenn Sie vorhaben, das MOAI-Objekt einer
normalen Gruppe hinzuzufügen, die keinen Rahmen hat, müssen
Sie nur den Identifikator des Fensters an moai.CreateObject()
übergeben. Beachten Sie jedoch, dass für den Fall, dass die
normale Gruppe selbst nur ein Element ist, das irgendwo in der
Hierarchie einer gerahmten Gruppe angehört, Sie den Identifikator
dieser gerahmten Gruppe übergeben müssen. Wenn Sie Objekte
zu einer Gruppe der Scrollgroup-Klasse
hinzufügen, müssen Sie zudem auch den Identifikator dieser
Scrollgroup als übergeordnetes Objekt übergeben.
Um es abstrakt auszudrücken: Das übergeordnete Objekt muss auf das nächste Objekt in der Layout-Hierarchie gesetzt werden, das eine visuelle Darstellung hat. Normale Gruppen sind nur Layout-Werkzeuge. Sie existieren nicht als Widget. Gerahmte Gruppen hingegen sind zwar Layout-Werkzeuge, aber sie sind auch Widgets, da sie eine visuelle Darstellung haben. Wenn Ihr Objekt also irgendwo in eine gerahmte Gruppe eingebettet werden soll, muss die gerahmte Gruppe als übergeordnetes Objekt übergeben werden. Wenn es in eine normale Gruppe eingebettet ist, dann muss das Fenster der obersten Ebene das übergeordnete Fenster sein. Vergessen Sie nicht, in Hierarchien zu denken: Auch wenn Sie Ihr Objekt an eine normale Gruppe anhängen wollen, kann es sein, dass die normale Gruppe selbst in eine gerahmte Gruppe eingebettet ist, was bedeutet, dass Sie die gerahmte Gruppe trotzdem als übergeordnete Gruppe übergeben müssen. Dies trifft auch auf Objekte der Scrollgroup-Klasse zu, da diese auch eine visuelle Darstellung haben.
Im Gegensatz zu moai.CreateApp() können
Sie moai.CreateObject()
beliebig oft aufrufen, da es kein Application-Objekt
für Sie erstellt, sondern nur losgelöste MOAI-Objekte, von
denen Sie beliebig viele haben können.
Es ist wichtig, dass Sie in der XML-Definition eine ID für Ihr MOAI-Objekt angeben, da Sie diese ID verwenden müssen, um auf dieses Objekt zu verweisen, wenn Sie es zu einem Application-, Menü- oder Gruppenobjekt hinzufügen möchten.
Sobald dieser Befehl beendet ist, können Sie mit dem neu erstellten MOAI-Objekt (und allen seinen untergeordneten) die Befehle moai.Set(), moai.Get() und moai.DoMethod() benutzen.
Losgelöste MOAI-Objekte können mit dem Befehl moai.FreeObject() gelöscht werden. Dies müssen Sie aber nur in bestimmten Fällen aufrufen, z.B. wenn Sie es mit vielen dynamisch zugewiesenen MOAI-Objekten zu tun haben und Sie etwas Speicher und Ressourcen sparen wollen.
moai.CreateObject([[ <window id="newwindow" title="A new window"> <vgroup> <button id="btn">Hello World!</button> </vgroup> </window> ]]) moai.DoMethod("app", "addwindow", "newwindow") moai.Set("newwindow", "open", True)Der obige Code erzeugt ein neues Fenster, fügt es dem bestehenden Application-Objekt hinzu und öffnet es.
moai.CreateObject([[ <button id="newbutton">Dynamically created button!</button> ]], "mywindow") moai.DoMethod("mygroup", "initchange") moai.DoMethod("mygroup", "append", "newbutton") moai.DoMethod("mygroup", "exitchange", false)Der obige Code erzeugt dynamisch ein neues Schaltflächen-Objekt und fügt es als letztes Element der Gruppe mit der ID "mygroup" hinzu.