AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi MDI Aktionen von Hauptformular an Kind weitergeben
Thema durchsuchen
Ansicht
Themen-Optionen

MDI Aktionen von Hauptformular an Kind weitergeben

Ein Thema von mani64 · begonnen am 18. Apr 2009 · letzter Beitrag vom 19. Apr 2009
Antwort Antwort
mani64

Registriert seit: 8. Apr 2009
49 Beiträge
 
Delphi 5 Professional
 
#1

MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 18. Apr 2009, 22:14
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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 18. Apr 2009, 22:43
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mani64

Registriert seit: 8. Apr 2009
49 Beiträge
 
Delphi 5 Professional
 
#3

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 18. Apr 2009, 22:52
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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 18. Apr 2009, 23:00
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mani64

Registriert seit: 8. Apr 2009
49 Beiträge
 
Delphi 5 Professional
 
#5

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 18. Apr 2009, 23:06
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.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 18. Apr 2009, 23:13
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mani64

Registriert seit: 8. Apr 2009
49 Beiträge
 
Delphi 5 Professional
 
#7

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 18. Apr 2009, 23:31
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?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 19. Apr 2009, 00:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: MDI Aktionen von Hauptformular an Kind weitergeben

  Alt 19. Apr 2009, 00:18
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...
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:27 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