Neues Fenster zur Laufzeit erstellen
-
Guten Abend Leute,
hat jemand von euch eine Ahnung wie ich z.B. wie bei ICQ für jeden User ein neues Chat Fenster erstelle

Eine neue Form als Chat Fenster zurechtbasteln is ja nicht nennenswert aber leider
kann ich sie nach meinen jetzigen Wissensstand nur für eine Instanz verwenden.Wäre sehr nett wenn mich jemand bei diesem Problem am Händchen nehmen würde
Hab echt keine Ahnung wie ich da vorgehen soll
-
Verstehe ich die Frage richtig: Du willst zur Laufzeit weitere Instanzen eines Forms anlegen? Das geht mit new.
TChatForm* DynChatForm = new TChatForm();In diesem Fall mußt Du das Form aber selbst freigeben. Entweder machst Du Dir für jede Instanz einen festen Zeiger, oder, wenn Du eine nicht festgelegte Anzahl hast, nimmst Du z.B. eine TList, in der Du die Zeiger abspeicherst.
-
Joe_M. schrieb:
TChatForm* DynChatForm = new TChatForm();Für gewöhnlich wird aber ein Owner (TComponent*) als Argument erwartet:
TChatForm* DynChatForm = new TChatForm(0);Joe_M. schrieb:
In diesem Fall mußt Du das Form aber selbst freigeben.
Es sei denn man übergibt Application als Owner:
TChatForm* DynChatForm = new TChatForm(Application);Dann kümmert sich Application um das Freigeben. Die Frage ist dann allerdings wann...
Gruß,
Alexander
-
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 daselbebis 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
