Schleifen Sie übergeordnete Komponenten (Container) vom letzten zum ersten Element (c++ 11)



  • Hallo
    Als Beispiel erstelle ich ein Formular mit drei TRectangle Komponenten. Jede davon enthält eine weitere TRectangle Komponente, mit Ausnahme der letzten (TRectangle3), die den Fokus hat:

    Form1
    I
    TRectangle1
    I
    TRectangle2
    I
    TRectangle3

    Ich muss Komponente für Komponente von TRectangle3 zum ursprünglichen Form1 gehen und zu diesem Zeitpunkt einige Eigenschaften der "aktiven“ Komponente ändern.

    Ich habe versucht, es umzusetzen:

    this->Root->GetObject();
    

    Aber ich bekomme es nicht zum Laufen.

    ¿ine Idee ?, danke.



  • Wenn die TRectangleX visuelle/sichtbare Komponenten sind (d.h. von Control erben), dann kannst du einfach mittels Parent nach oben navigieren (du mußt aber in den entsprechenden Typ casten, z.B. mit dynamic_cast<...>).



  • Danke für die Antwort...

    Richtig es ist ein eine visuelle Komponente ... aber sie wäre innerhalb einer Android-Anwendung (sorry
    dass ich es nicht kommentiert habe), y ich die Datei Vcl.Controls.hpp nicht einbinden kann mi Projekt.



  • Dann mußt du die zugehörige FMX-Eigenschaft Parent benutzen (jedes TFmxObject besitzt diese).
    Und du solltest direkt darauf zugreifen können, ohne weitere Headerdateien einbinden zu müssen.



  • Danke. Ich werde es versuchen und sehen, ob ich es bekomme



  • Hallo

    Abschließend wird es wie folgt gelöst:

    TControl* obj = TRectangle3;
     
    ShowMessage(obj->Name); // Rectangle3
     
    while (obj->HasParent()) {
     
        obj = (TControl*)obj->GetParentComponent();
     
        ShowMessage(obj->Name); // Rectangle2, Rectangle1, Form1
     
    }
    

Anmelden zum Antworten