Menus - capturando todos os subitens

Top  Previous  Next

Esta rotina pega todos os menus (items e sub-itens) de um menu e

coloca-os numa stringlist:

 

procedure PegaMenus(Menu: TMainMenu; var Nomes: TStringList);

var

  I: Integer;

  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);

  end;

end;

.