ganz viele fenster



  • hallöle

    ich schreib grad nen icq klon mit dem builder
    mittlerweile bin ich soweit, dass ich n hauptfenster hab wo ich zu nem anderen rechner connecten kann und mich unterhalten und so und funzt auch alles ganz gut

    jetz wollte ich aber in die nächste stufe gehen, sprich für mehrere clients jewils ein eigenes chatfenster aufmachen, ich hab aber keine ahnung wie (bin immer noch n00b also nich hauen)
    nich fenster in fenster (also mdi), sondern sdi

    selbst wenn ich wüsste wie ich neue instanzen von fenstern erstelle (was ich nicht tue, bitte erklären) muss ich die ja irgendwie nummerieren, dass ich die alle einzeln ansprechen kann
    da ich aber nie wissen werde, wie viele clients zu mir connecten werden kann ich ja keine festen namen vergeben sondern muss das irgendwie dynamisch machen

    kann mir einer erklären wie das geht (am besten n00bie freundlich 😉
    vielen dank
    M@x



  • Hi,
    also neue Fenster erstellst du mit new:

    TForm2 *temp;
    // TForm2 muss natürlich bekannt sein, dazu Datei-Unit Header einschließen
    // den entsprechenden Header einbinden
    temp = new TForm2(this);
    temp->Show();
    

    (die musst du dann wieder, wenn sie geschossen werden, mit delete freigeben)

    Ich würde das dann so machen, dass ich die ganzen Forms in einen dynamischen Kontainer wie z. B. eine Vector packe! Da kann ich bel. viel Elemente einfügen und jeden dann einzeln ansprechen!

    // oben bei den andern includes:
     #include <vector>
    
     // dann den vector als globale Var deklarieren:
     std::vector<TForm2 *> Fenster;
    
     // in Methode die Fenseter öffnet (z.B. ein ButtonClick)
     TForm2 *temp;
     temp = new TForm2(this);
     temp->Show();
     Fenster.push_back(temp);
     Fenster.back()->Label1->Caption = Fenster.size();
    
     // zum beim Schließen der Fenster
     delete Fenster.back();
     Fenster.pop_back();
    

    Ist ein kleines Testprojekt:

    Form1 mit 2 Button und Form2 mit einem Label
    1. Button öffnet die Fenster
    2. Button schließt die Fenster
    im Label wird die Fensternummer angezeigt

    Falls noch Fragen sind einfach nachfragen!

    MFG

    Alexander Sulfrian



  • hm jo danke
    aber so wie ich das versteh liegen die fenster jetz auf nem stack
    richtig?
    dann kann ich die ja nicht spezifisch einzeln ansprechen, sondern immer nur das oberste schliessen(bzw killen), odda versteh ich da was falsch?



  • ich hab mir das nochmal überlegt

    eigentlich brauch ich ja nur eine zuordnung socket->fenster
    direkt ansprechen muss ich die fenster ja eigentlich nicht
    wenn also n event auf dem und dem socket kommt, kann ich das an dem zugehörogen fenster ausgeben lassen
    kann ich dafür ein neues objekt erstellen und von socket erben lassen und nur zusätlich noch einen zeiger auf das fenster implementieren?
    geht doch bestimmt oder?
    nur das bekomm ich dann wieder nicht implementiert im builder 😞



  • Hi,

    Du kannst auch mit

    Fenster.at(x)->....
    

    einbeliebiges inerhalb des vectors ansprechen!
    Gib doch einfach mal vector in den Editor ein und drück F1! Die Hilfe erklärt alles (leider nur auf Englisch)

    MFG

    Alexander Sulfrian



  • Siehe FAQ, "Komponenten benutzen - dynamische Arrays".



  • jou, danke für die hilfe allerseits

    ich habs jetz anders gemacht
    für jeden neuen client erstelle ich n neues fenster in welchem (u.a. (in nem ansistring) die ip steht)
    dann klebe ich dieses fenster in eine TListBox (brauchte ich ja eh)

    temp = new TMainForm("nick","<ip>",this);
    ListBox->AddItem(temp->Nick,temp);
    

    somit habe ich die zurdnung ip<->fenster immer gegeben (ich muss zwar immer die ganze liste durchsuchen wenn ich das fenster zu der ip finden möchte

    for (int c=0;c<Liste->ListBox->Items->Count;c++){
            TMainForm *TheObject = (TMainForm *)ListBox->Items->Objects[c];
            if(von==TheObject->zugehoerigeIP){
                    smile();
                    break;
            }
    }
      //von=IP nach der gesucht wird, TheObject->zugehoerigeIP = IP aus dem fenster
    

    mag unschön und langsam sein, aber das war halt das was im rahmen meiner möglichkeiten lag 😉

    P.S.
    gibts es im builder sowas wie n "reformat code"?
    in sun one (java) gibts das
    dann setzt der die tabstops für die klammer der if abfragen etc. automatisch
    von hand machen suckt mich mittlerweile irgendwie n bissi an 🙂

    [ Dieser Beitrag wurde am 06.07.2003 um 03:11 Uhr von M@xwell editiert. ]

    [ Dieser Beitrag wurde am 06.07.2003 um 03:14 Uhr von M@xwell editiert. ]



  • Original erstellt von M@xwell:
    P.S.
    gibts es im builder sowas wie n "reformat code"?
    in sun one (java) gibts das
    dann setzt der die tabstops für die klammer der if abfragen etc. automatisch
    von hand machen suckt mich mittlerweile irgendwie n bissi an 🙂

    Hi,
    nein leider nicht! Aber soooooo schlimm ist es doch nicht?

    MFG

    Alexander Sulfrian


Anmelden zum Antworten