![]() |
Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Werte Gemeinde!
Ich schau mir gerade das Demo-Programm "TextEdit" an (bei mir unter C:\Program Files\Borland\BDS\4.0\Demos\DelphiWin32\VCLWin32\D oc\TextEdit) und verstehe einfach nicht, wie fogendes dort realisiert worden ist: Mit jedem Öffnen eines neuen Documnets (MDI Child) wird der Name diese Documents (FileName) im Menü "Window" als letzter Eintrag eingetragen. So dass der User in diesem Menü immer sehen kann, welche Files gerade offen sind. Obwohl mir der Quell-Text vorliegt, verstehe ich nicht, wie "die" (Borländer) das machen. Hab einen Breakpoint beim Create des MDI-Child gesetzt und dann Schrittweise ge-debuggt -- keine Ahnung wie diese wundersame Technologie funktioniert! Irgendwo muß doch das Menü "Window1" aufgerufen werden und dort in einer Art Liste der Filename ge-added werden, aber wo genau passiert das denn? Vielleicht hat jemand ja eine Idee? Vielen Dank vorab Gruß Jazzman |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Eigentlich müsste es reichen den Formstyle bei den MDI FOrmularen auf fsMDIChild zu stellen und ein MainMenu auf die Form zu packen.
Die Hauptform stellst du auf fsMdiForm und packst dort auch ein MainMenu drauf |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Zitat:
Genauso habe ich es in meiner Anwendung getan (alles andere funktioniert ja bestens) -- aber mit dem Öffnen eines neuen Files taucht dessen Name nicht im "Window" Menü auf. Aber wenn das so automatisch funktionieren sollte, so muß doch da ein Trick dabei sein: Woher "weiss" die Anwendung, dass ich das so haben will? D.h. ich könnte es garnicht ausschalten, wenn ich das nicht haben möchte? Oder geht das irgendwie über die "Benamsung" des Menüs: Sobald es "Window" heisst, werden am Ende die Kind-Fenster-Namen hinzugefügt? (Dann muß ich mir die Benamsung näher anschauen -- kann es aber fast nicht glauben...) Erstmal Danke! Jazzman |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Zitat:
|
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Form1.WindowMenu := ChildList;
Sorry, aber ich verstehe die Erklärung nicht -- habe ein Paar versuche unternommen, aber es fuktioniert nicht. Vielleich erkläre ich das mal so:
Delphi-Quellcode:
Tut mir leid für die langwierige Erklärung, aber wie gesagt: ich versteh es noch nicht.
1. Auf der MDI-Form (Eltern-Form) habe ich ein MainMenu, welches *kein* "Window" Menü hat (braucht ja auch keines, da nach dem Start kein MDI-Kindfenster existiert.
2. Auf der MDI-CHILD-Form habe ich ein MainMenu, mit einem Menü "Window" und einem (noch) leerem Untermenü mit dem Namen "ChildList". 3. Wohin jetzt mit "Form1.WindowMenu := ChildList;" 3.1 Testweise in die Create-Routine des MDI-Childs Nachdem Start der Anwendung und dem Öffnen eines File (=Erzeugen des MDI-Kindes) ist das besagte Untermenü immer noch leer. 3.2 Testweise in die Create-Routine des MDI-Eltern-Form Exception -- klar, zu diesem Zeitpunkt gibt es ja noch kein MDI-Kind-Fenster (Im übrigen finde ich nichts vergleichbares in dem Borland-Demo TextEdit -- machen die das denn ganz anders?) Vielen Dank Jazzman |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Du musst auf der Hauptform ein MainMenu mit einem MenuItem haben, das dann dem WindowMenu zugeordnet wird.
//edit: In der Borland Demo ist das bestimmt im Objektinspektor gesetzt |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Ich krieg es nicht hin :wall: -- es wird einfach kein Eintrag in dieses Menü gemacht.
Ich schiele mir die Augen aus dem Kopf beim Betrachten des Borland-Beispiels: Entweder die zaubern, oder das Turbo-Delphi hat einen Knacks -- anders kann ich es mir einfach nicht erklären. Dennoch vielen Dank für die Unterstützung -- ich forsche einfach derweil witer ;-) Gruß Jazzman |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Zitat:
Ich habe mir bei Zarko Gajic auf Delphi.about.com genau dieses Projekt " ![]() a) es funktioniert nicht b) dort fehlt auch der ob zitierte Eintrag: Form1.WindowMenu := ChildList; Das muß eine Verschwörung sein... :evil: Tschöh Jazzman |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Hallo,
ist ganz einfach. Dein MDI-Parent-Form hat ein Mainmenu. Einer der Menueeinträge kann als "Container" für die MDI-Child-Fenster fungieren. Dazu musst Du einfach im Mainform die Eigenschaft Linkage-WindowMenu auf einen Eintrag deines Mainmenu setzen. Sobald Du dann ein MDI-Child erzeugst steht dort der neue Eintrag drin. Ciao Frank |
Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Zitat:
Also, jetzt habe ich auch lagsam hinbekommen -- naja, fast. (Ich hatte einfach nicht geblickt, dass mit TMenuItem ein Hauptmenü und kein Submenü gemeint ist, und das man das tatsächlich im Objekt-Inspektor der MDI-Eltern-From eintragen kann.) Soweit also ok: Wenn ich ein MDI-Kind-Form erzeuge, wird dies brav in dem Menü verzeichnet. ABER: Wenn ich ein weiteres MDI-Kind erzeuge und dort den Focus drauf sitzen habe, dann steht in dem eben erwähnten Menü nichts! Wechsle ich den Focus auf das zuerst erzeugte Kind-Fenster, sehe ich dem Menü zwei Einträge (was ja auch korrekt ist). D.h. nur das erste erzeugte MDI-Kind-Fenster führt brav Buch über die neu erzeugten Kind-Fenster -- alle übrigen habe nichts in diesem Menü. Obwohl doch alle mit dem gleichen Coding erzeugt werden:
Delphi-Quellcode:
Naja, jetzt wo ich es so schreibe: Das erste MDI-Kind-Fenster, wird tatsächlich anders erzuegt! Unmittlebar nach dem Start, ist die MDI-Eltern-Form leer, und der User geht nun auf das Menü File, und dann auf das Submenü 'Load':
PROCEDURE TMDI_CHILD_frm.LoadClick(SENDer: TObject);
BEGIN MAIN_MDI_frm.LoadClick(Sender); END;
Delphi-Quellcode:
PROCEDURE TMAIN_MDI_frm.LoadClick(Sender: TObject);
BEGIN WITH OpenDialog1 DO BEGIN Filter := 'Text Files (*.txt)|*.txt|Alle Files(*.*)|*.*'; DefaultExt := 'txt'; IF Execute THEN WITH TMDI_CHILD_frm.Create(Self) DO anything... END; END; Alle weiteren Kinder werden über das erste Coding erzeugt: Was nichts anderes macht, als das untere Coding auszurufen. Eigentlich identisch - aber der Unterschied zeigt sich wie oben beschrieben: Diese Fenster haben keine Einträg im Window-Menü -- was ja mit jedem neuen Fenster wachsen sollte (wie im allerersten Fenster). Puh, das war lang und mir ist einiges klar geworden -- aber das erklärt mir noch immer nicht den obigen Fehler. Vielleicht hat ja noch jemand Lust mal darüber nachzugrübeln -- obwohl es ist ja schon spät... Vielen Dank & Gruß Jazzman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz