MDI-Anwendung
-
Hallo,
mein Hauptformular ist als MDI-Fenster festgelegt (FormStyle=MDIForm). Jetzt sollen aber Client-Fenster nicht in diesem Hauptformular erscheinen, sondern in dem MDI-Fenster "Test". Was muss ich hierfür tun?
(In Test.cpp erzeuge ich beim Anzeigen des Formulares ein Client-Fenster mitChild = new TMDIChild(Application);
)
Das Client-Fenster erscheint aber im Hauptformular!
-
Meines Wissens gibt es keine Möglichkeit ein MDI-Child in ein MDI-Child zu basteln... würde auch jeglichem Styleguide widersprechen. Darf man wissen, wozu du mehrere "MDI-Parents" brauchst?
-junix
-
Ich habe ein Hauptformular mit verschiedenen Buttons. Als eine Buttonaktion soll dann das MDI-Test-Formular geöffnet werden, in dem ich z.B. mehrere Notepad-Clientfenster öffne und mir nebeneinander anzeigen lasse. Im Hintergrund soll das Hauptformular weiterhin stehen, damit ich zwischen Hauptformular und Test-Formular hin- u. her schalten kann oder ggf. auch beide nebeneinander schieben kann.
Kann ich nicht das Hauptformular als FormStyle = Normal einstellen und nur das Test-Formular als MDIForm?
-
Doch sicher, das wäre auch der übliche Weg (o;
-junix
-
Wenn ich das aber so mache, dann erscheint, wenn ich auf den Button zum Anzeigen des Test-Formulars drücke, folgende Fehlermeldung: "Formular kann nicht erstellt werden. Zur Zeit sind keine MDI-Formulare aktiv".
Das Test-Formular wird aber genauso wie das HAuptformular beim Programmstart erzeugt.
-
Moin
also irgendwie verstehe ich deine frage auch nicht so recht
aber sagen wir so
dein Hauptformular ein MDIForm
und jedes weitere Formular als MDIChild
dann unter Projekt -> Optionen die ChildForms auf die seite der
Verfügbaren schiebenund dann kannst du sie aus dem MDIForm heraus öffnen
mit --> new TForm2(this);lege auf das OnClose des MDIChild den Code
--> Action=caFree;dann schliesst der Button auch und minimirt das ChildFenster nicht nur
ich hoffe du wurdest geholfen ...
-
Natürlich brauchst du ein MDI-Parent-Fenster... mit "Der übliche Weg" meinte ich den Weg, dass dein "Hauptformular" ein unabhängiger Dialog (ein weiteres Form) ist...
-junix
-
Nochmal:
Mein Hauptformular ist kein MDI-Formular, sondern FormStyle=Normal. Vom Hauptformular aus lasse ich mir über eine Buttonaktion das MDI-Formular "TEst" anzeigen, in dem dann mehrere Client-Fenster erzeugt werden sollen.
Doch da erscheint eben diese olle Fehlermeldung! Warum?
-
Weil, soviel ich weiss, dein Hauptformular ein MDI-Parent sein muss... Was allerdings klappen könnte: Das Hauptformular beim Starten auf visible=false und nur den Dialog anzeigen und dann, bei bedarf das Hauptformular auf visible=true setzen...
-junix
-
Also muss das HAuptfenster doch ein MDI-Formular sein!
Wenn ich nun also das Hauptfenster und das Formular "Test" als MDI-Formular festgelegt habe, muss es doch möglich sein auch festzulegen, in welchem der beiden die Clients geöffnet werden sollen, oder?
-
also du kannst grundsätzlich als erstes formular ein
fsNormal anlegen woraus du ein MDIForm öffnest
aber zwei MDIForm sind nicht möglich und Child öffnet sich nun mal im MDIForm
also ist die wahl des öffnens der ChildForms nur auf das MDIForm beschränkt
du musst also erst das MDIForm öffnen bevor du ein Child öffnestich sehe aber irgendwie keinen Sinn in dem was du da tust... sorry
-
Das Hauptformular ist nun kein MDI-formular, aber das "Test"-Formular. JEtzt öffne ich das Test-Formular und möchte ein Client-Fenster darin öffnen. Daraufhin erfolgt immer noch die Fehlermeldung: "Formular kann nicht erstellt werden. Zur Zeit sind keine MDI-Formulare aktiv".
Warum??????? Was fehlt??????
-
Original erstellt von teacherwilli:
Das Hauptformular ist nun kein MDI-formular[...]Nochmal zum abzeichnen für analphabeten:
Genau das ist dein problem: Das Hauptformular muss ein MDI-Form sein! Lies oben nochmals durch was ich geschrieben hatte.
-junix
-
Problem ist aber: wenn ich als Hauptformular das "Test"-Formular einstelle hat dies den unerwünschten Nebeneffekt, dass das ganze Programm beendet wird, wenn ich das Test-Formular schließe. Wie kann ich das ändern, dass das Programm nur beendet wird, wenn das ursprüngliche Hauptformular geschlossen wird und nicht das "Test"-Formular?
-
Beim CloseQuery-Event des Test-Formulars CanClose auf false setzen und dafür beim Schliessen des Dialogs Application->Terminate() aufrufen hilft eventuell.
...untested...
-junix
-
Kann ich mein MDI-formular irgendwie (z.B. mit der Komponente PageControl) aufteilen in zwei Bereiche, sodass ich im linken Drittel meine Buttons anordnen kann und im rechten 2/3-Teil (z.B. auf der PageControl-Komponente) meine Clientfenster erstellen kann?