![]() |
TMainMenu duplizieren
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? |
Re: TMainMenu duplizieren
Zitat:
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. |
Re: TMainMenu duplizieren
Danke für die schnelle nächtliche Antwort :)
Zitat:
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. |
Re: TMainMenu duplizieren
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:
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.
procedure TForm1.Button1Click(Sender: TObject);
begin Form2.MainMenu2.Merge(MainMenu1); Form2.ShowModal; end; |
Re: TMainMenu duplizieren
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. |
Re: TMainMenu duplizieren
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:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 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