Frage zum Thema: mehrere zur Laufzeit erstellten VCL-Objekte gleichzeitig verwalten



  • Hallo,

    Ich möchte PageControl's mit TabSheets's und RichEdit's zur Laufzeit
    erstellen, da die Anzahl dynamisch ist und nicht vorher festgelegt
    werden kann.
    Die PageControls stehen später alle untereinander, da es wie eine
    Übersicht werden soll.
    Sollte eines der RichEdit vollgeschrieben sein (wird per Event
    geprüft), wird automatisch ein neues TPageControl wieder mit
    RichEdit's usw. erstellt und ich möchte in dem neuen RichEdit
    weiterschreiben.

    Das Problem ist, wenn die neuen PageControls erstellt werden, werden
    leider auch meine alten RichEdit Objekte überschrieben
    und ich komme an die "alten" nicht mehr ran, falls ich plötzlich
    merke, ich hab mich im alten RichEdit verschrieben oder ähnliches.

    Als Codeschnipsel leg ich mal meine Erstellung bei:

    global hab ich

    int i = 0; // Variable für die Höhe(Top) der PageControl

    Als Test das hier im OnButtonClickEvent, soll später passieren wenn
    ein RichEdit voller Text ist, geht nur um das Prinzip

    TPageControl* page = new TPageControl(Form1);
    page->Parent = Form1;
    page->Top = i;
    i = i + 600; // PageControlhöhe wird um 600 erhöht und
    somit hab ich eine schöne Übersicht meiner ganzen PageControls
    page->Width = 50;
    page->Left = 5;
    page->Height = 500;

    TTabSheet* tab1 = new TTabSheet(page);
    tab1->PageControl = page;
    tab1->Caption = "Vorderseite";
    tab1->Visible = true;

    TRichEdit redit1 = new TRichEdit(tab1);
    redit1->Parent = tab1;
    redit1->Visible = true;
    redit1->Text = "Test";

    Wie gesagt, nun passiert es, wenn ich erneut den Button drücke, er
    mir meine PageControls alle untereinander darstellt.
    Ich sehe zwar noch die alten PageControls kann sie aber nicht mehr
    handlen, da die Objekte überschrieben wurden.
    Ich kann zwar die Objekte speichern, hab aber im Prinzip immer nur
    ein aktuelles Objekt, Möchte aber eigentlich alle bis jetzt
    erstellten Objekte "handlebar" haben.
    Später soll der Inhalt natürlich aus allen RichEdit Feldern der Text
    ausgelesen und gespeichert werden.

    Es ist vergleichbar mit Word, ich hab eine Seite, ist die voll kommt
    die nächste auf der ich schreiben kann.
    Es ist aber auch kein Problem auf die alte Seite wechseln und dort
    noch was zu ändern.

    Ich nutze den Borland C++ Builder 6.0 mit VCL

    MfG

    muendh

    Wer eine Idee hat oder entscheidente Tipps bitte ich um Antwort am ---> muendh@aol.com

    Thx an alle mit einem guten Tipp.



  • Hallo

    das gehört doch offentsichtlich ins Builder-Forum.
    Und dein Prolem läßt sich mit einem dynamischen Array wie std::vector oder DynamicArray lösen, wo du Pointer auf die bestehenden Tabs/RichEdits speicherst.

    Außerdem benutzt hier im Forum die C++ Tags, um deinen Code hervorzuheben. (Beim Schrieben eines Beitrags unter den Smilies zu finden)

    bis bald
    akari



  • Ich weiß nicht ob ich dich richtig verstanden habe, aber ich probiers mal.

    TPageControl* page = new TPageControl(Form1);
    ...
    TTabSheet* tabs[16]; // Hier kannst du nun z.B. 16 Tabs halten.
    tabs[0] = new TTabSheet(page);
    ...
    TRichEdit redit[16]; // Das selbe dann noch bei RichEdit
    redit[0] = new TRichEdit(tabs[0]);
    ...
    

    Und beim nächsten Durchlauf erstellst du neue Objekte und speicherst die Zeiger in tabs[1]...[n] usw.



  • Hallo,

    Das steht doch alles auch in der FAQ des BCB-Forums unter Komponenten.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten