Neues Fenster zur Laufzeit erstellen
-
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

-
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
-
@akari
Für die std::map sollte man aber #include<map> machen.
Bei deinen Post ist es #include<Map>
-
akari schrieb:
Deshalb eigenen Container (std::map), dann wird auch die Suche für dich übernommen.
Eigentlich dachte ich "eine Ebene höher". Es führen bekanntlich viele Wege zum Ziel und vielleicht gibt
es einen Weg das Speichern von Formularen oder Durchgehen der Formulare, Verwendung von maps o.ä. komplett
zu vermeiden.
Nebenbei, wenn Du Formulare verschiedenen Typs in eine map wirfst, musst Du doch wohl auch casten, oder?Gruß,
Alexander
-
Hallo
Eigentlich dachte ich "eine Ebene höher".
Und an was genau dachtest du da?
Ich selber würde jedem User in ein struct/class aufnehmen, der neben den Namen und Verbindungsdaten u.a. auch einen Pointer auf das eventuell vorhandene Chat-Fenster enthält. Aber auch das würde ich in einen Standard-Container packen.bis bald
akari