Instanzen von Frames bilden



  • Hallo,

    kann mir jemand sagen weshalb ich von einem Frame nicht mehrere Kopien auf einer Form bilden kann?

    Ich versuche einen Frame container für Datendarstellung ( soll ungebunden sein )zu erstekllen, möchte diesen mehrmals untereinander anzeigen lassen.

    Erste instanz kriege ich erstellt.

    TFrameDataContainer *dataContainer[ i ] =new TFrameDataContainer ( this );
    
    dataContainer[ i ]->Parent = ( this );
    // weiterrer Code , Position etc.
    

    Bei Instanzierung des nächten elements bekomme eine Zugriffsverletzung , dieser sei schon vorhanden.

    Wie kommt das ?
    Ich instanziere doch ein neues Objekt vom Typ TFrameDataContainer?

    Für freundliche Hilfe wäre ich dankbar!



  • Hallo

    Ja, das hat mit den Instanzen selber nichts zu tun.
    Sondern du must vor dem Zuweisen der Parent-Eigenschaft dem Frame noch eine eindeutige Bezeichnung für die Eigenschaft Name geben. Denn zur Laufzeit wird nur der Standardname vergeben.

    Das gleiche Problem hättest du auch zu Entwurfszeit, wenn du zwei Komponenten auf einer Form die gleichen Namen geben wolltest.

    bis bald
    akari



  • Danke für Deine Antwort.

    Aber so ganz stimmt es denke ich nicht.

    Selbest wenn ich feste Variable Namen habe , bekomme ich die Fehler Meldung
    Komponente existiert bereits, dabei möchte ich nur neue Instanz der Klasse TFrameDataContainer erstellen, so wie das üblich bei der OOP ist.

    Oder ist das mal wieder ein Borland spezial



  • Nein, Akari meint, du mußt die Eigenschaft 'Name' eindeutig festlegen, d.h z.B.

    dataContainer[ i ]->Name = "Frame" + IntToStr(i);
    


  • Hallo

    Selbest wenn ich feste Variable Namen habe

    Was verstehst du darunter? Du brauchst für jede neue Instanz einen neuen, vorher nicht vorhandenen Namen.

    Du kannst das einfach testen, indem du zur Entwicklungszeit mal über den OI mehrere deiner Frames auf ein Form setzt.

    Natürlich ist das Komponenten-Verhalten Borland-spezifisch. Die ganze VCL ist von Borland, und läuft nur mit Borland-Compilern.

    bis bald
    akari



  • Also Leute,

    erstmal Danke für Eure Hilfe.

    So funktionierts:

    TFrame2 *fr=new TFrame2( new TGroupBox(this)  );
    TFrame2 *fr1=new TFrame2( new TGroupBox(this)  );
    


  • Hallo

    ja das geht auch, die beste (weil schlankeste) Variante ist es aber nicht.

    bis bald
    akari



  • Jo , das ist richtig, Danke.

    Ich möchte nämlich damit eine Art typisierten visuellen DataContainer entwerfen, der autark von der Datenquelle arbeitet und aus einem Dynamic Array informationen
    über eine im Frame abgebildeten GUI Schema darstellt.

    Die Container werden dann in die Form dynamisch pro Array Eintrag hinzugefügt.

    Die Daten kommen ursprünglich aus dem Backend.

    Nur exemplarisch, um zu zeigen was ich damit vorhabe.

    static int x=10;
    static int y=10;
    box=new TGroupBox( this);
    box->SetBounds( x,y,500,80 );
    box->Parent=this;
    box->Show();
    
    y+=90;
    
    fr=new TFrame2( box  );
    fr->SetBounds( 10,10,fr->Width,fr->Height );
    fr->Parent=box;
    fr->Show();
    

    Wie erwähnt nur exemplarisch, also nicht sofort kritisieren 🕶


Anmelden zum Antworten