Iterating main menu items (including sub-items)

I am trying to iterate over all the main menu items. The problem starts with submenu items. A structure such as Menu.Items [i] .Items [j] .Items [k] doesn't look easy to work with. Is there any method for this?


My goal is to list all the element labels.

+7
source share
2 answers

You can use such a recursive function

procedure TForm1.ProcessMenu(AMenu: TMenuItem); var i: integer; begin for i := 0 to AMenu.Count - 1 do begin Memo1.Lines.Add(AMenu[i].Caption); ProcessMenu(AMenu[i]); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ProcessMenu(MainMenu1.Items); end; 
+14
source

Use this code:

 USES Menus; TYPE TItemArr = ARRAY OF TMenuItem; FUNCTION AllItems(MainMenu : TMainMenu) : TItemArr; VAR I : Cardinal; PROCEDURE Parse(VAR Result : TItemArr ; Item : TMenuItem); VAR I : Cardinal; BEGIN SetLength(Result,SUCC(LENGTH(Result))); Result[HIGH(Result)]:=Item; FOR I:=1 TO Item.Count DO Parse(Result,Item.Items[PRED(I)]) END; BEGIN SetLength(Result,0); FOR I:=1 TO MainMenu.Items.Count DO Parse(Result,MainMenu.Items[PRED(I)]) END; 

Use it as:

 VAR MI : TMenuItem; FOR MI IN AllItems(MainMenu) DO ProcessMenuItem(MI); 
+5
source

All Articles