AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Verständnisfrage zu MDI: Kindfenster im Menü eintragen
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage zu MDI: Kindfenster im Menü eintragen

Ein Thema von Jazzman_Marburg · begonnen am 2. Mai 2010 · letzter Beitrag vom 3. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 13:13
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 13:26
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
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 13:43
Zitat von daywalker9:
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
Hallo!

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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 13:51
Zitat:
MDI parent form Main Menu, again
The Window menu of an MDI application should also include a list of the MDI child windows. As everything in Delphi, this is easy to accomplish. Assume that we have a menu item named ChildList on a MDI form. To add the list of MDI child windows, set:

Form1.WindowMenu := ChildList;
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#5

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 14:25
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:
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
Tut mir leid für die langwierige Erklärung, aber wie gesagt: ich versteh es noch nicht.

(Im übrigen finde ich nichts vergleichbares in dem Borland-Demo TextEdit -- machen die das denn ganz anders?)

Vielen Dank
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#6

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 14:29
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
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#7

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 15:54
Ich krieg es nicht hin -- 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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#8

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 16:25
Zitat von daywalker9:
Zitat:
MDI parent form Main Menu, again
The Window menu of an MDI application should also include a list of the MDI child windows. As everything in Delphi, this is easy to accomplish. Assume that we have a menu item named ChildList on a MDI form. To add the list of MDI child windows, set:

Form1.WindowMenu := ChildList;

Ich habe mir bei Zarko Gajic auf Delphi.about.com genau dieses Projekt "MDI DEVELOPMENT IN DELPHI. Part II." angeschaut und das Projekt downgeloaded:
a) es funktioniert nicht
b) dort fehlt auch der ob zitierte Eintrag: Form1.WindowMenu := ChildList;

Das muß eine Verschwörung sein...

Tschöh
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 19:01
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
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#10

Re: Verständnisfrage zu MDI: Kindfenster im Menü eintragen

  Alt 2. Mai 2010, 21:24
Zitat von FrankJ28:
Hallo,
ist ganz einfach...
Ciao
Frank
Ja, im Prinzip schon...
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:
PROCEDURE TMDI_CHILD_frm.LoadClick(SENDer: TObject);
BEGIN
  MAIN_MDI_frm.LoadClick(Sender);
END;
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':

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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz