AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TMainMenu duplizieren

Offene Frage von "Keks"
Ein Thema von Keks · begonnen am 17. Sep 2009 · letzter Beitrag vom 17. Sep 2009
Antwort Antwort
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#1

TMainMenu duplizieren

  Alt 17. Sep 2009, 01:04
Ich benötige auf einer zweiten Form das MainMenu der MainForm etwas abgeändert.
Da das Menü dynamisch erzeugt wird, würde ich mir diesen Aufwand für die zweite Form gerne sparen und einfach das erste Menü kopieren, leicht abwandeln und zuweisen/anzeigen.

Leider weiß ich nicht, wie ich das nun am einfachsten machen kann. Ein einfaches Zuweisen resultiert in "Menu 'MM' is already being used by another form" - es wird also eher ein Verweis übergeben und nicht wirklich kopiert.

Wie dann? Alle Items und Subitems in Schleifen oder regressiv durchgehen finde ich zu umständlich.

Wie also am einfachsten?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: TMainMenu duplizieren

  Alt 17. Sep 2009, 01:17
Zitat von Keks:
Wie dann? Alle Items und Subitems in Schleifen oder regressiv durchgehen finde ich zu umständlich.
ich befürchte das wird der gängige Weg sein
alles durchgehn und je gefundenem item eine Kopie (ein Neues Item, mit selber Caption und Co.) erstellen

man könnte auch einfach die HauptItems im Menü auf das andere Menü übertragen, aber dabei würden sie aus dem QuellMenü verschwinden



eine einfache Lösung wäre aber:
- du erstellst also das "Original"-Menü dynamisch?
- dann leg den Code zum Erstellen in eine gemeinsame Prozedur, welcher du die jeweilige Form übergibst)
- rufe diese Funktion einmal für die erste Form auf und laß dort das Menü erstellen
- und dann einfach nochmal die selbe Prozedur für deine neue Form aufrufen und dort wieder ein Menü erstellen lassen

- in der Prozedur kannst du dann ja auf via IF-Then die änderungen, welche du eigentlich nachträglich machen woltest direkt beim Aufbau des Menüs einfließen lassen.
$2B or not $2B
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#3

Re: TMainMenu duplizieren

  Alt 17. Sep 2009, 01:32
Danke für die schnelle nächtliche Antwort

Zitat von himitsu:
- du erstellst also das "Original"-Menü dynamisch?
Naja, Teile davon. Sonst hätte ich Deinen Vorschlag schon umgesetzt gehabt.
Es ist ein überschaubarer Aufwand, es so umzubasteln, dass es komplett dynamisch erstellt wird. Dachte aber, das kann ich mir evtl. sparen.

Schade, dass es keine einfache Funktion dafür gibt.
Naja, ich lass das hier erstmal noch so stehen. Falls jemandem noch was einfaches einfällt, bitte Bescheid geben. Ansonsten bau ich das morgen Abend dann wirklich so um.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

Re: TMainMenu duplizieren

  Alt 17. Sep 2009, 09:50
Man könnte mit Merge Form1.TMainMenu vor Aufruf von Form2 an Form2.TMainMenu kleben, danach (noch vor Anzeige des Form2) weitere Anpassungen.

Ob man Merge besser nur einmal beim Form2.Create aufruft und wie sich das dann ganz genau verhält, müsstest Du testen. Eine 1:1 Kopie funktioniert tadellos. Auch mehrfacher Aufruf von Merge erzeugt keine doppelten Einträge.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.MainMenu2.Merge(MainMenu1);
  Form2.ShowModal;
end;
PS: Sehe gerade in der Delphi Hilfe (zumindest von D5) ist auch eine elegante Vorgehensweise beschrieben, wenn beide Menüs in Teilen von einander abweichen.
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#5

Re: TMainMenu duplizieren

  Alt 17. Sep 2009, 15:05
Mit Merge kannn ich eine 1:1 "Kopie" erstellen. Diese lässt sich aber leider nicht bearbeiten, weil hier das Original-Menü quasi als Verweis eingebunden wird.

Wo genau hast Du das Beispiel in der Delphi-Hilfe gefunden?
In Delphi 2006 finde ich zumindest unter "TMainMenu.Merge Methode" nichts.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TMainMenu duplizieren

  Alt 17. Sep 2009, 15:14
Hmm, habe es nur schnell 1:1 getestet, da mir die Hilfe sugerierte, dass es auch nach Deinen Wünschen geht.

Ich zitiere mal aus der Delphi-5 Hilfe, denke als Ausschnitt sollte das soweit erlaubt sein:
Zitat:
Beschreibung

Rufen Sie Merge auf, um ein anderes Hauptmenü mit dem vorliegenden Hauptmenü zu kombinieren. Im Parameter Menu geben Sie das Menü an, das mit diesem Menü kombiniert werden soll.

Wenn zum Beispiel das Hauptmenü des ersten Formulars einer Anwendung als Hauptmenü für die gesamte Anwendung verwendet werden soll, integrieren Sie durch einen Aufruf von Merge die Hauptmenüs aller weiteren Formulare der Anwendung in das Hauptmenü des ersten Formulars.

Abhängig vom Wert der Eigenschaft GroupIndex der Einträge des Hauptmenüs können Einträge ersetzt oder neu hinzugefügt werden. In der Beschreibung von GroupIndex finden Sie dazu detaillierte Informationen.

Wenn die Kombination von Menüs bei der Anzeige eines anderen Formulars automatisch durchgeführt oder aufgehoben werden soll, setzen Sie die Eigenschaft AutoMerge aller Formulare, deren Menüs integriert werden sollen, auf True.
Schnell getestet:

Lege für zusätzliche Menüpunkte in Form2.MainMenu einen anderen GroupIndex fest, danach Merge mit Form1.MainMenu. Voila sind aus beiden die MenuItems kombiniert.

Problem:

Hauptmenu-Punkte tauchen dann doppelt auf. Also Innerhalb z.B. dem Datei-Menü einzelne Sub-Einträge zuzufügen scheint nicht zu funktionieren, es erschein ein zweites Datei-Menü. (Also Funktionsweise wie bei MDI-Anwendungen)

Anders ausgedrückt, werden beim Merge alle Einträge eines GroupIndex entfernt, wenn dieser GroupIndex beim zugefügten Menü bereits existiert. Guppen können nicht gemischt werden, sondern nur weitere MenüGruppen zugefügt werden.
  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 11:23 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