Einige Fragen zum MDIChild
-
Hallo Zusammen,
ich möchte eine kleine MDIAnwendung realisieren und habe jetzt ein paar Fragen zum MDIChild. Vielleicht kann mir da ja jemand weiterhelfen. Würde mich freuen.1. Wenn ich in der Anwendung ein MDIChild aufrufe starte ich es maximiert. Wenn ich das Child z.B. über ein MainMenu aufrufe sieht man wie sich das Child öffnet. Also, man sieht wie es aufgeht und dann maximiert wird. Kann man das umgehen?
2. Ich habe ein weiteres Form eingefügt und als MDIChild deklariert. Das öffne ich auch über das MainMenu. Wenn ich es aber schließen möchte, wird es nach unten in der Anwendung minimiert. Ich möchte aber, dass es sich schließt. Beim ersten Child geht das. Was muß ich machen, damit es auch beim zweiten funktioniert?
3. Über das MainMenu kann ich ein MDIChild so oft aufrufen wie ich will. Jedesmal wird ein neues MDIChild erstellt. Wie kann ich das umgehen? Ich möchte über jeden Menüpunkt nur ein Child öffnen können.
Das wars eigentlich. :p
Kann mir da jemand weiterhelfen?
Schonmal danke im voraus.
EPMS
-
zu 1.
FormPlaner *FormPlaner = new TFormPlaner(FormMain); FormPlaner->WindowState = wsMaximized; FormPlaner->Show();zu 2.
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; }zu 3.
hm ja... keine Ahnung was du genau willst aber evtl. bringt dich das weitervoid __fastcall TFormMain::mnuFuhrparkClick(TObject *Sender) { bool gefunden=false; //Überprüfen ob das MDIChild besteht for (int i = MDIChildCount - 1; i >= 0; i--) { if ((AnsiString)MDIChildren[i]->ClassName() == "TFormFuhrpark") { MDIChildren[i]->Show(); gefunden=true; } } if (!gefunden) {//Fuhrpark erstellen TFormFuhrpark *FormFuhrpark = new TFormFuhrpark(Application); FormFuhrpark->WindowState =wsMaximized; FormFuhrpark->Show(); } }
-
@VergissEs
Danke für die Hilfe. Punkt 2 und 3 hat funktioniert.Leider klappt es bei Punkt 1 nicht. Momentan habe ich es so:
bool gefunden=false; //Überprüfen ob das MDIChild besteht for (int i = MDIChildCount - 1; i >= 0; i--) { if ((AnsiString)MDIChildren[i]->ClassName() == "Tartikel_anlegen") { MDIChildren[i]->Show(); gefunden=true; } } if (!gefunden) {//Fuhrpark erstellen Tartikel_anlegen *artikel_anlegen = new Tartikel_anlegen(Application); artikel_anlegen->WindowState =wsMaximized; artikel_anlegen->Show(); }Leider sieht man dann immernoch, wie sich das Formular vergrößert. Das wollte ich ja nicht.
Hast du da noch eine Idee?
-
Hi,
hast du in deinen MDI Childforms die Eigenschaft WindowState wsNormal stehen?
falls nicht mach das mal denn wenn man wsMaximized angiebt kommt dieses Fenster flackern
-
Hi,
wenn ich das aber auf wsNormal stelle öffnet sich das Child aber nicht mehr Maximiert. Ich möchte es aber maximiert haben. Was muß ich denn dann noch machen?
-
Du gibst doch beim Form erzeugen an das es Maximiert sein soll mit
artikel_anlegen->WindowState =wsMaximized;
-
Wenn ich das wieder rein nehme, ist es wieder so wie vorher. Man sieht, wie sich das Fenster maximiert.
-
im meine in der Entwicklungsumgebung also in deiner Form selbst
WindowState=wsNormal angeben.denn wenn die Form beim erzeugen schon wsMaximized hast sieht man es wenn es maximiert wird.
-
Hallo VergissEs,
also ich habe jetzt in der EntwicklungsumgebungWindowState=wsNormalUm das Formular aufzurufen habe ich folgendes stehen:
if (!gefunden) {//Fuhrpark erstellen Tartikel_anlegen *artikel_anlegen = new Tartikel_anlegen(Application); artikel_anlegen->WindowState =wsMaximized; artikel_anlegen->Show(); }Wenn ich das Formular jetzt aufrufe, sehe ich immernoch wie es maximiert wird. Allerdings sieht man es jetzt bei den anderen Formularen nicht mehr.
Wenn also das erste Formular maximiert aufgerufen wird, wernde die anderen auch maximiert aufgerufen und da sieht man es nicht.
Man sieht es immer nur bei dem Formular, dass zu erst aufgerufen wird.
Weißt da auch noch was?
Gruß
-
Hallo VergissEs,
hast du vielleicht noch eine andere Idee? Leider habe ich es noch immer nicht hinbekommen.Danke im voraus
-
Wenn du pro Menüpunkt nur ein Child öffnen möchtest solltest du vielleicht überlegen ob MDI hier überhaupt der richtige Weg ist und du mit unabhängigen Fenstern nicht besser kommst. MDI-Applikationen sind sowieso (zu Recht) etwas aus der Mode gekommen.
-
Guten Morgen,
es soll ja pro Menüpunkt mehrere Childs geöffnet werden. Was schlägst du denn anderes vor?
Und wieso (zu Recht) ist eine MDI-Anwendung etwas aus der Mode gekommmen? Gibt es denn inzwischen etwas, was "besser" ist?
-
Guten Morgen,
Das mit dem "aus der Mode gekommen" meinte ich, weil die meisten Applikationen zur Zeit (Office, Borland-Produkte etc.) kein MDI sondern eher frei bewegbare bzw. andockbare Fenster verwenden. Dies macht die Gestaltung einer Anwendung flexibler. Der Verwaltungsaufand für den Programmierer steigt dadurch natürlich, weil er sich jetzt auch noch um die Anordnung kümmern muss. Das ist aber auch eine Geschmacksfrage. Ich muß zugeben, dass mir MDI-Anwendungen noch nie so richtig gefallen haben, da man bei der Gestaltung der Childs doch arg an das Hauptfenster gebunden ist.
-
Achso, so ist das gemeint. Das ist warscheinlich wirklich Geschmackssache. Ich habe davor ein Programm mit frei beweglichen Fenstern gemacht. Jetzt wollte ich dieses gerne in einer MDI-Anwendung lösen. Vielleicht schwenke ich ja doch noch um. :p
Wobei das mit andockbaren Fenster auch sehr interessant klingt. Gibts da was gutes zum lesen drüber?Kann mir denn sonst vielleicht jemand bei meinem Problem helfen?