![]() |
Zwei PopUp's zusammenführen?
Moin, Moin.
In einer von TTreeView abgeleiteten Komponente möchte ich ein PopUpMenü bereitstellen, welches Standardoperationen (Layout, Sortierung) bereitstellt. Mit Einbindung der Komponente steht dieses dem Anwendungsprogramm dann automatisch zur Verfügung und kann dann um anwendungsbezogene Aufgaben ergänzt werden. Meine Überlegung ist nun, das anwendungsbezogene Popup "ganz normal" und ohne Bezug auf das in der Komponente enthaltene Popup zu definieren und in einem zweiten Schritt das neu erstellte Popup mit dem bereits in der Komponente enthaltenen zu einem optisch einzigen Popup zu "verschmelzen". Natürlich könnte man das in der Komponente enthaltene Popup erweitern, aber vielleicht gibt es ja auch eine Möglichkeit, das vorstehend beschriebene "Verschmelzen" zu realisieren? Hat jemand eine Idee, oder ist mein Denkansatz grundsätzlich nicht umzusetzen? |
Re: Zwei PopUp's zusammenführen?
Delphi-Quellcode:
Der Aufruf wäre dann:
procedure CloneMenuItem(source, dest : TMenuItem);
begin dest.Action := source.Action; dest.Caption := source.Caption; dest.ShortCut := source.ShortCut; dest.Checked := source.Checked; dest.Enabled := source.Enabled; dest.Visible := source.Visible; dest.OnClick := source.OnClick; dest.HelpContext := source.HelpContext; dest.Hint := source.Hint; dest.RadioItem := source.RadioItem; end; procedure CopyMenuItems(source, dest : TMenuItem); var i : Integer; mi : TMenuItem; begin Assert(Assigned(source), 'no source menu item'); Assert(Assigned(dest), 'no destination menu item'); // dest.Clear; // auskommentiert, da MenuItems im Ziel erhalten bleiben sollen for i :=0 to source.Count-1 do begin mi := TMenuItem.Create(dest); CloneMenuItem(source.Items[i], mi); dest.Add(mi); if source.Items[i].Count > 0 then CopyMenuItems(source.Items[i], mi); // rekursiver Aufruf ;-) end; end;
Delphi-Quellcode:
CopyMenuItems(Komponente.PopupMenue.Items, PopupMenue1); // oder anderstrum, je nachdem, was dann das aktive PU-Menue sein soll
|
Re: Zwei PopUp's zusammenführen?
Ja, das schaut ja wirklich sehr gut aus; werde es mal in Ruhe ausprobieren. Hatte nicht mit einer betriebsfertigen Lösung gerechnet. Aber wenn ich mir den Code so anschaue, muss ich doch stark bezweifeln, ob ich das, selbst bei konkreten Hinweisen, hinbekommenn hätte.
Vielen, vielen Dank shmia :hi: |
Re: Zwei PopUp's zusammenführen?
So, habe es jetzt mit Erfolg getestet!
Es funktioniert! Im Aufrufbeispiel hat sich ein Flüchtigkeitsfehler eingeschlichen; es muss natürlich auch der zweite Parameter als Items übergeben werden:
Delphi-Quellcode:
Thanks a lot :thumb:
CopyMenuItems(Komponente.PopupMenue.Items, PopupMenue1.Items);
// oder andersrum, je nachdem, was dann das aktive PU-Menue sein soll |
Re: Zwei PopUp's zusammenführen?
Leider, leider befällt mich nun eine gewisse Ernüchterung :cry:
Da das ganze ja letztlich ein KOPIEREN des einen in das andere PopUp darstellt, verliert das Programm den Zugriff auf Eigenschaften des kopierten PopUps. Ein deaktivieren/aktivieren eines Eintrags des "kopierten PopUps" ist nicht mehr möglich, da diese Operationen ja an das Original gesendet werden und nicht an die Kopie. Damit wäre mein Ansinnen dann doch uninteressant - oder bin ich schon wieder zu blöd eine Lösung zu finden????? |
Re: Zwei PopUp's zusammenführen?
Den Code der beim Anwählen eines Menüpunkts ausgeführt wird nicht in den OnClick Handler des Menüitems legen sondern immer mit Actions arbeiten. Dann kannst Du eine Action beliebig vielen Items zuweisen und wenn Du sie deaktivieren willst: Action deaktivieren und schon sind alle zugehörigen Menüpunkte auch deaktiviert!
Und dann klappt auch der obige Codemit dem Duplizieren des Popups :-) Grüße, Uli |
Re: Zwei PopUp's zusammenführen?
Guten Morgen Uli,
vielen Dank für den Hinweis! :hi: Hatte letzte Nacht noch weiter gegrübelt. Problem war, dass im OnClick des Source-PopUps einige Tests und Einstellungen von Untermenüs vorgenommen wurden. Das Source-PopUp-OnClick steht nach dem kopieren der Items in das Destination-Popup aber nicht mehr zur Verfügung. Die Lösung in meinem konkreten Fall, liegt letztlich auf der Hand: Die Tests und Einstellungen mussten einfach nur in die OnClick-Events der Source-Items aufgenommen werden, die die jeweiligen Untermenüs aufrufen. Die OnClick-Events der einzelnen Items werden ja kopiert und stehen im Destination-Popup zur Verfügung - mein Ziel ist also erreicht! Muss zu meiner Schade gestehen, dass ich noch nie (?! :oops: ) mit Actionlists gearbeitet habe, werde mir das einmal näher anschauen. |
Re: Zwei PopUp's zusammenführen?
Ich würde am kopieren festhalten. Um Änderungen am Nutzermenü jedoch mit zu bekommen würde ich vor jedem anzeigen das Menü erneut kopieren (natürlich vorher die alten Einträge raus schmeißen).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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