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/)
-   -   Ein MenüItem in mehrere PopUp Menüs adden (https://www.delphipraxis.net/174295-ein-menueitem-mehrere-popup-menues-adden.html)

Satyr 15. Apr 2013 17:13

Ein MenüItem in mehrere PopUp Menüs adden
 
Hallo,

ich habe ca. 8 PopUp Menüs die ich teilweise dynamisch fülle und dynamisch entscheide welches genommen wird.
Soweit kein Problem. Aber alle 8 bekommen jetzt einen Untermenü mit Einträgen aus einer DB. Alle 8 quasi das Gleiche.
Deshalb dachte ich mir ich kann es mir einfach machen und die Daten einmal auslesen und allen Menüs zuweisen.
Also in etwa so etwas:

Delphi-Quellcode:
Item:= TMenuItem.Create(Self);
Item.Caption := 'Test';

Menu1.Add(Item);
Menu2.Add(Item);
Geht natürlich nicht, Menu2 wird nicht gefüllt. Irgendwie logisch, Item ist ja schon in Verwendung.
Allerdings, kann ich es - mit dem selben Namen - erneut creieren und dann an Menu2 hängen.

Wie mache ich das aber automatisch, so das ich nicht für jedes Menü das Gleiche per Hand schreiben muss?

Gruß,
Andreas

sx2008 15. Apr 2013 20:26

AW: Ein MenüItem in mehrere PopUp Menüs adden
 
Einfach kopieren...
Delphi-Quellcode:
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;

   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;

CopyMenuItems(PopupMenu1.Items, PopupMenu2.Items);

Satyr 16. Apr 2013 11:41

AW: Ein MenüItem in mehrere PopUp Menüs adden
 
Danke, klappt perfekt :).


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