Dynamisch GUI-Menüs bauen
Übersicht

![]() |
Spark FountainBetreff: Dynamisch GUI-Menüs bauen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin vor kurzem von Blitz3D auf BlitzMax umgestiegen. Jetzt möchte ich in einem Projekt, das später mal eine IDE werden soll, aus einer Textdatei dynamisch Menüs bauen lassen. Soll heißen, man kann das, was als Menüs im Programm dargestellt wird extern definieren.
Jetzt habe ich mir überlegt, für die Menühierarchie (Parent-Child-Beziehungen) ein Konstrukt wie einen Stack zu bauen, der speichert welches Menü das aktuelle Parent ist. Dafür wollte ich ein TList-Objekt nehmen, allerdings bin ich nicht in der Lage, nachdem ich ein TGadget-Element in die Liste eingefügt habe, auch wieder ein TGadget-Element herauszubekommen. Der Aufruf "First()" liefert immer ein Object und ich kenne keine Möglichkeit, das zurück in ein TGadget zu casten. Gibt es irgendeinen anderen Befehl auf TList, um das reine Objekt mit seinem Typen wieder abzurufen? Viele Grüße Stefan |
||
Gewinner der MiniBCC's #11, #13 und #28 |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
also, um von Object in einen anderen Typen zu casten, muss du folgendes machen: DeinType(Object). DeinType wäre in diesem Fall TGadget, Object wäre das aus der Liste geholte Objekt. Danach empfiehlt es sich, eine Null-Prüfung durchzuführen, denn wenn die Umwandlung nicht funktioniert, da das Objekt nicht vom angegebenen Typ ist, wird an dieser Stelle Null returned. Einfacher ist es jedoch, die Liste durchzuiterieren. Dann gibst du als "Läufer" einfach eine Variable vom Zieltyp an, sprich: BlitzMax: [AUSKLAPPEN] For Local gadget:TGadget = EachIn Liste Dann kannst du auf das TGadget über gadget zugreifen. Auch hier würde sich eine Null-Prüfung empfehlen, wenn du dir nicht 100%ig sicher bist, dass du nur TGadgets in deiner Liste hast. |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
CO2 hat eigentlich alles wichtige schon gesagt, aber weil es zum Verständnis gut ist,
möchte ich noch was hinzufügen: TGadget ist eine Klasse aus MaxGUI und in BlitzMax sind alle Klassen implizit von Object abgeleitet. D.h. wenn du bei einer Type-Definition kein Extends schreibst, ist es das gleiche, wie wenn du Extends Object schreiben würdest. Falls du die Klasse von einer anderen ableitest, gilt das natürlich auch, weil schlussendlich irgendeine Überklasse von Object abgeleitet ist. Wegen des Polymorphismus kannst du jetzt Kindklassen auf die Typen ihrer Elternklassen casten, ohne die Information zu verlieren, welcher Klasse sie eigentlich angehören. Beispiel: BlitzMax: [AUSKLAPPEN] Type A Die Information geht also nicht verloren. Auch nicht bei einer Liste: BlitzMax: [AUSKLAPPEN] Import maxgui.drivers |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Spark Fountain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für die schnellen Antworten! Diese Notation von Type-Casting kannte ich noch nicht. Hab ich auch nicht in der BlitzMax-Doku gefunden (welche ich überhaupt ziemlich bescheiden und unübersichtlich finde). | ||
Gewinner der MiniBCC's #11, #13 und #28 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group