Menus - capturando items independente da qtd |
Top Previous Next |
|
Captura o nome e o caption de um componente MainMenu e devolve numa StringList não importando a quantidade de sub menus que haja.
procedure PegaMenus(Menu: TMainMenu; var Nomes: TStringList); var I: Integer; // procedure interna. procedure GetMenus(Menu : TMenuItem; Nivel1: TMenuItem; var Nomes : TStringList); var I, X : Integer; MenuI: TMenuItem; begin // For no Itens se o Items > 0 Faz recursividade for I := 0 to Pred(Menu.Count) do begin // Agora mesmo é que nao sei mais nada if Nomes.IndexOf(Menu.Items[I].Name + '=' + Menu.Items[I].Caption) = -1 then if Menu = Nivel1 then if (Menu.Items[I].Caption <> '-') then Nomes.Add(Menu.Items[I].Name + '=' + Menu.Items[I].Caption); MenuI := Menu.Items[I]; for X := 0 to Pred(MenuI.Count) do if (MenuI.Items[x].Caption <> '-') and (MenuI.Items[x].Count = 0) then Nomes.Add(MenuI.Items[x].Name + '=' + MenuI.Items[x].Caption); GetMenus(MenuI, Nivel1, Nomes); end; end; begin for I:=0 to Pred(Menu.Items.Count) do begin Nomes.Add(Menu.Items[I].Name + '=' + Menu.Items[I].Caption ); GetMenus(Menu.Items[I],Menu.Items[I],Nomes);// chama ela mesma de dentro de ela mesma end; end; |