Используйте этот код:
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;
Используйте это как:
VAR MI : TMenuItem;
FOR MI IN AllItems(MainMenu) DO ProcessMenuItem(MI);