Komponenten Array?



  • Hallo.

    Wir wollen uns an einem Logikspielchen versuchen und haben jetzt ein Problem bei der Realisierung und hoffen hier auf Hilfe. 🙂

    Es gibt eine grafische Komponentene, worauf der Benutzer Gegenstände bewegen kann, wodurch diese Zustände annehmen können. Das bereits fertig.

    Jetzt soll es diese aber mehrmals geben in "Ebenen" und derjenige soll die Ebenen jederzeit neu sortieren können.

    Heisst der Spieler kann im Spiel weitere solcher grafischer Ebenen/Komponente anlegen und löschen und auf einen anderen Index bzw Ebenenreiehenfolge verändern.

    Frage ist nun wie löst man am besten den Ebenenteil?

    Gibt es einen Container, in den man die Komponente beliebig oft hinzufügen kann, einen Eintrag löschen und einen Eintrag verschieben wie in einer StringListe?

    Hoffentlich habe ich unser Problem etwas verständlich dargestellt 🤡



  • Hallo,

    In der VCL gibt es hier z.Bsp. TList, TComponentList, TObjectList. Standard-C++ bietet auch einiges wie z.Bsp. std::list, std::vector etc.



  • Vielen Dank für die schnelle Hilfe. TComponentList klappt super mit eintragen, löschen und entfernen.

    Kann man TComponentList als Komponente abspeichern als Datei und bei einem späteren Start des Programmes in TComponentList wieder direkt einlesen?



  • Dazu mußt du erstmal die darin steckenden Komponenten speichern und laden können. Da ich nicht weiß was du da reinstecken willst kann ich erstmal nichts weiter dazu sagen.



  • Also die reingesteckte Komponente kann man laden und speichern

    In dieser Form: Komponente->SaveToTextFile(Filename);



  • Dann kannst du ja diese Funktion nutzen. Du machst eine Schleife über deine Liste, castest deine Objekte in den konkreteten Objekttyp (dynamic_cast zur Sicherheit) und rufst die genannte Funktion auf.

    // complist ist deine Liste und TKomponente dein Komponententyp
    for( int i=0; i<complist->Count; ++i)
    {
       TKomponente* comp = dynamic_cast<TKomponente*>(complist->Items[i]);
       if( comp ) comp->SaveToTextFile(Filename);
    }
    


  • Also nicht im gesamten.. dann müsste man die Dateien so ablegen, das man sie in der richtigen Reihenfolge auch wieder einliest. Danke!

    Kleine dumme Frage hätte ich da aber gern noch gestellt. Warum mit cast?
    Warum nicht einfach complist->Items[i]->SaveToTextFile(...)?



  • Die Objekte in TComponentList sind vom Typ TComponent und da gibt es diese Funktion ja nicht. Das steht aber auch in der Hilfe.


Anmelden zum Antworten