Neues Fenster zur Laufzeit erstellen



  • Alexander Kempf schrieb:

    Die Frage ist dann allerdings wann...

    Deswegen mach ich das lieber selbst. 😉 Nach meinem Verständnis dürften die Forms aber erst beim Beenden der Application freigebeben werden.



  • Joe_M. schrieb:

    Deswegen mach ich das lieber selbst.

    Halte ich auch für sinnvoll.

    Joe_M. schrieb:

    Nach meinem Verständnis dürften die Forms aber erst beim Beenden der Application freigebeben werden.

    Vermute ich auch, weswegen Deine Vorgehensweise empfehlenswert ist.

    Gruß,

    Alexander



  • Pack die 2. Form in einen Cotainer wie DynamicArray oder einem Container aus der STL. So kannst du sie dynamisch hinzufügen und bei Bedarf wieder löschen.



  • Vielen Dank euch allen !

    Ich versteh nur Bahnhof 😕
    Ich habe jetzt Form4 als Chat Fenster zurecht gebastelt, wie fahre ich von da ab fort ?

    Ausser Form4->ShowModal(); kann ich nichts 😞



  • Zunächst musst du den Header deiner ChatForm in der Unit deiner Hauptform inkludieren.

    Danach definierst du für die Form eine Variable im Header deiner Hauptform:

    TFormChat    *frmChat;
    

    Und wenn du die ChatForm anzeigen willst:

    frmChat  = new TFormChat(FormMain);
    
     if (frmChat)
          {
             Hide;
             if (frmChat->ShowModal == mrOK)
             {
                Show;
             } 
          }
    

    Müsste eigentlich so funzen...

    MfG,
    MastaFlasH



  • Vielen lieben Dank 🙂

    Ohne ShowModal() funktionierts am besten da ich jetzt n-mal Form4 aufrufen kann ohne das die Form1 blockiert wird:

    Einfachste Variante:

    ChatWindow  = new TForm4(Form1);
    
        if (ChatWindow)
          {
    
             ChatWindow->Show();
    
          }
    


  • Zero01 schrieb:

    Vielen lieben Dank 🙂

    Bitteschön 🙂

    Zero01 schrieb:

    Ohne ShowModal() funktionierts am besten da ich jetzt n-mal Form4 aufrufen kann ohne das die Form1 blockiert wird:

    Achso, du wolltest beide Fenster parallel haben 😉

    Klar, bei meiner Methode hätte das Hauptformular auf das "mrOk" vom Chatfenster gewartet, und wäre zwischenzeitlich natürlich blockiert gewesen...

    MfG,
    MastaFlasH



  • Ok, wie kann ich jetzt jedes neu erzeugte Chat Fenster ansprechen. Gib es dafür eine Art Array ? ChatWindow->Name sieht schon mal gut aus, dort kann ich ja den eindeutigen User Name für die neue Form verwenden. Doch wie klappert man am besten Fenster für Fenster ab damit nicht für User "Karl" ein zweites erzeugt wird.



  • Hallo

    am besten mit einer Map

    #include <Map>
    std::map<AnsiString, TFormChat *> FormChatForm;
    

    wie die Map benutzt wird, kannst du im Forum und Tutorials finden.

    bis bald
    akari



  • Vielen Dank Akari 🙂 👍



  • Und in der erzeugten Form kann ich doch bedenkenlos this-> verwenden, oder gibts da einen Einwand ?



  • Hallo

    ja, kannst du, brauchst du aber nicht.

    this->Caption = "Test";
    Caption = "Test"; // genau daselbe
    

    bis bald
    akari



  • Danke Akari, hab jetzt mal ein bisschen im Forum gesucht aber leider nichts zu diesem Map template gefunden. Kennst du ein Tutorial wo ich damit ein Array aller erzeugten Fenster Captions anlegen kann ?



  • Könntest Du nicht statt dessen mit Screen->FormCount und Screen->Forms arbeiten?

    Gruß,

    Alexander



  • Spitze Alex ! Super

    for (int i = 0;i < Screen->FormCount;i++)
      {
       if (Screen->Forms[i]->Caption == "TestWindow ")
       ShowMessage("");
      }
    

    Was muss ich deleten wenn ich ein neu erzeugtes Fenster schliesse da er momentan auch reagiert wenn ich das Fenster geschlossen habe ? Da kann man doch bestimmt was über OnClose biegen



  • Ahhhhhhhhh, habs rausgefunden:

    void __fastcall TForm4::FormClose(TObject *Sender, TCloseAction &Action)
    {
      delete this;        
    }
    


  • Wenn ich folgendes mache:

    for (int i = 0;i < Screen->FormCount;i++)
      {
       if (Screen->Forms[i]->Caption == "Searched_Window ")
    ...
    ......
    

    Wie kann ich den jetzt in die Memo1 Komponente der gesuchten Form zugreifen um dort einen String ein zu tragen 😕



  • Zero01 schrieb:

    Wie kann ich den jetzt in die Memo1 Komponente der gesuchten Form zugreifen um dort einen String ein zu tragen 😕

    Es ist klar, dass in Screen::Forms keinerlei Informationen über Deine selbstgebastelten Formulare direkt zugänglich sind.
    Um das zu realisieren musst Du halt einen cast machen. Wenn Du mal verrätst, was Du eigentlich erreichen will, könnte
    man sich aber mal Gedanken darüber machen, ob es einen anderen Weg gibt.

    Gruß,

    Alexander



  • Ich denke hier wäre dann wohl ein Array dieser Forms besser (dann braucht man keinen cast).



  • Hallo

    Wenn Du mal verrätst, was Du eigentlich erreichen will, könnte
    man sich aber mal Gedanken darüber machen, ob es einen anderen Weg gibt.

    Deshalb eigenen Container (std::map), dann wird auch die Suche für dich übernommen.
    Für Infos über map siehe z.B.
    http://www.cppreference.com/

    bis bald
    akari


Anmelden zum Antworten