Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MDI Aktionen von Hauptformular an Kind weitergeben (https://www.delphipraxis.net/132749-mdi-aktionen-von-hauptformular-kind-weitergeben.html)

mani64 18. Apr 2009 21:14


MDI Aktionen von Hauptformular an Kind weitergeben
 
Hallo,

immer wieder merke ich, wie wenig Ahnung ich habe .... :(

In einer MDI-Applikation habe ich im Hauptfenster im Menü z.B. einen Menüpunkt "Update" (mit Check-Funktion). Er soll dem aktiven Kindfenster entweder erlauben oder verbieten, neue Zeilen von der Datei einzulesen, wenn die größer geworden ist.

Im Child-Formular hab ich bei Type TDMIChild unter public eine Variable update:boolean definiert. Wie kann ich diese vom Hauptfenster aus setzen?

Wie ermittle ich das aktive Kind-Fenster? Oder ist es besser, eine Botschaft zu senden, die dann vom aktiven Kind-Fenster umgesetzt wird? (Und wie geht so etwas?).

Bei der Erschaffung des Fensters ist es einfach, weil ich dort eine Variable habe, über die ich zugreifen kann:

var Child:TMDIChild;
begin Child:=TMDIChild.Create... -

dann kann ich mit Child.update darauf zugreifen.
Aber wie geht das im späteren Verlauf?

Apollonius 18. Apr 2009 21:43

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Den Menüpunkt Update solltest du dem TMainMenu des Kindfensters spendieren. Bei Delphi-MDI-Formularen wird das Hauptmenü des aktiven Kindfensters automatisch in das Hauptmenü des Elternfensters eingefügt. So hältst du zusammen, was zusammen gehört.

mani64 18. Apr 2009 21:52

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Hi,

ja, das ist eine gute Idee.
Aber wie funktioniert das sonst?
Ich habe im Hauptfenster die Menüpunkte mit einer Aktionlist verbunden. Bei den Menüpunkten "Kopieren,..." etc. funktioniert das doch auch, dass sie irgendwie an das aktive Kindfenster weitergereicht werden. Wie funktioniert das denn?

Apollonius 18. Apr 2009 22:00

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Es gibt eine Eigenschaft ActiveMDIChild oder so ähnlich. Deren Wert kannst du dann casten. Elegant ist das allerdings nicht, weil es durchaus passieren kann, dass du mehrere Typen von Kindformularen hast, die unterschiedliche Aktionen zulassen. Dort wird es dann hässlich, weil du an ganz verschiedenen Stellen Änderungen machen musst, wenn du neue Formulare hinzufügst oder entfernst.

mani64 18. Apr 2009 22:06

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Das Menü des Kindfensters ersetzt das Menü des Hauptfensters.

Heißt das, ich muss alle Menüpunkte des Hauptfensters beim Kind duplizieren? Die sind nämlich weg, sobald das Kindfenster ein eigenes Menü hat.

Apollonius 18. Apr 2009 22:13

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Probleme gibt es meines Wissens nur, wenn Hauptfenster und Kindfenster einen Top-Level-Menüpunkt mit dem selben Namen haben. Es kann natürlich auch sein, dass ich mich da täusche. Schau mal in der Hilfe nach.

mani64 18. Apr 2009 22:31

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Also, das Menü des Kindfensters ersetzt komplett das des Hauptfensters. Menü-Oberpunkte, die das Kindfenster nicht hat, sind danach weg.

Bisher hab ich beim Erstellen der Applikation immer das Grundkonzept von Delphi unter "Datei, neu, Projekte, MDI-Anwendung" verwendet. Das beinhaltet ja schon die wesentlichen Elemente, unter anderem auch eine Toolbar mit Icons.

Wenn ich nun dem Kindfenster ein eigenes Menü gebe, dann muss ich auch die Toolbar dorthin transferieren. Ich finde allerdings, dass das nicht so gut aussieht. Scheint aber wohl die einfachste Lösung zu sein.

Gibt es nicht auch die Möglichkeit, an das Kind eine Nachricht zu senden, die dann von ihm bearbeitet wird, wenn es den Fokus hat?

sx2008 18. Apr 2009 23:14

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Zitat:

Zitat von mani64
Also, das Menü des Kindfensters ersetzt komplett das des Hauptfensters.

Wieso komplett? Es findet doch ein Merge (Mischen) statt.
Das Property GroupIndex steuert wo die Menuitems des Childform im Hautmenue eingeblendet werden.

Flocke 18. Apr 2009 23:18

Re: MDI Aktionen von Hauptformular an Kind weitergeben
 
Zitat:

Zitat von mani64
Also, das Menü des Kindfensters ersetzt komplett das des Hauptfensters. Menü-Oberpunkte, die das Kindfenster nicht hat, sind danach weg.

Welche Teile des Menüs ersetzt werden kannst du über den GroupIndex steuern.

Beispiel:

Dein Hauptfenster hat 5 Top-Level-Menüeinträge:
Datei (GroupIndex = 0)
Bearbeiten (GroupIndex = 1)
Noch leer (GroupIndex = 5)
Extras (GroupIndex = 8)
Hilfe (GroupIndex = 9)

Dein MDI-Fenster hat z.B. zwei Top-Level-Menüeinträge:
Ansicht (GroupIndex = 2)
Spezielle Funktionen (GroupIndex = 5)

Dann besteht das zusammengesetzte Hauptmenü aus:
Datei (GroupIndex = 0)
Bearbeiten (GroupIndex = 1)
Ansicht (GroupIndex = 2)
Spezielle Funktionen (GroupIndex = 5)
Extras (GroupIndex = 8)
Hilfe (GroupIndex = 9)

Schau dir am besten Mal die Hilfe zur Eigenschaft "GroupIndex" bei Menüs an.

[Edit]
Ui... zu viel geschrieben... und kein roter Kasten...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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