Fórum TMainMenu - listar todos os items #316891
21/03/2006
0
Estou precisando listar os Itens do meu MENU, só está vindo os itens do cabeçalho (linha Principal - Cadastro - Relatorio....) está + ou- assim
for i := 0 to menuPrincipal.Items.Count -1 do
begin
menuPrincipal.Items[i].Name := MenuAcesso;
end;
se alguem poder me ajudar.....
Desde ja Obrigado
Minervasoft
Curtir tópico
+ 0Posts
21/03/2006
Adriano Santos
procedure TForm1.Button1Click(Sender: TObject); var I, J : Integer; begin ListBox1.Items.Clear; for J := 0 to MainMenu1.Items.Count-1 do begin ListBox1.Items.Add(MainMenu1.Items[J].Caption); for I := 0 to MainMenu1.Items[J].Count-1 do ListBox1.Items.Add(MainMenu1.Items[J].Items[I].Caption); end; end;
Gostei + 0
21/03/2006
Martins
procedure TForm1.Button1Click(Sender: TObject); var I, J : Integer; begin ListBox1.Items.Clear; for J := 0 to MainMenu1.Items.Count-1 do begin ListBox1.Items.Add(MainMenu1.Items[J].Caption); for I := 0 to MainMenu1.Items[J].Count-1 do ListBox1.Items.Add(MainMenu1.Items[J].Items[I].Caption); end; end;
Blz de código [b:89c2a4b943]Adriano[/b:89c2a4b943], gostaria só de implementar os Submenus caso venham a existir OK!
Espero q vc não veja problemas em modificar um pouco o código.
procedure TForm1.Button3Click(Sender: TObject); var I, J, L : Integer; begin ListBox1.Items.Clear; for J := 0 to MainMenu1.Items.Count-1 do begin ListBox1.Items.Add(MainMenu1.Items[J].Caption); for I := 0 to MainMenu1.Items[J].Count-1 do begin ListBox1.Items.Add(MainMenu1.Items[J].Items[I].Caption); for L := 0 to MainMenu1.Items[J].Items[I].Count-1 do ListBox1.Items.Add(MainMenu1.Items[J].Items[I].Items[L].Caption); end; end; end;
Boa sorte.
Gostei + 0
21/03/2006
Adriano Santos
Gostei + 0
22/03/2006
Minervasoft
muito obrigado......
Silvio Coelho
Gostei + 0
22/03/2006
Martins
hehehehe :D
Blz [b:97d1cfbf18]Silvio Coelho[/b:97d1cfbf18], [b:97d1cfbf18]Adriano[/b:97d1cfbf18] aí teriamos q mudar o algoritmo hehe.
Valew
Gostei + 0
22/03/2006
Michael
Não!!!
É para isso que servem as [b:5788447c9f]rotinas recursivas[/b:5788447c9f]:
procedure PercorrerMenu(Menu: TMenuItem); var I: Integer; begin for I := 0 to Menu.Items.Count - 1 do begin ListBox.Items.Add(Menu.Items[I].Caption); if Menu.Items[I].Count > 0 then PercorrerMenu(Menu.Items[I]); end; end;
Independentemente da quantidade de menus e submenus existentes, todos serão listados.
[]´s
Gostei + 0
22/03/2006
Martins
Não!!!
É para isso que servem as [b:e7a19e958e]rotinas recursivas[/b:e7a19e958e]:
procedure PercorrerMenu(Menu: TMenuItem); var I: Integer; begin for I := 0 to Menu.Items.Count - 1 do begin ListBox.Items.Add(Menu.Items[I].Caption); if Menu.Items[I].Count > 0 then PercorrerMenu(Menu.Items[I]); end; end;
Independentemente da quantidade de menus e submenus existentes, todos serão listados.
[]´s[/quote:e7a19e958e]
Pq será q eu estranhei vc não aparecido antes :roll: :?:
:D Valew [b:e7a19e958e]Michael[/b:e7a19e958e] ou [b:e7a19e958e]Michel[/b:e7a19e958e], hehe, [b:e7a19e958e]Michael[/b:e7a19e958e] mesmo, recursividade, é isso aí, Falei Adriano q tinha outro jeito.
Gostei + 0
22/03/2006
Adriano Santos
Não!!!
É para isso que servem as [b:6b1c509781]rotinas recursivas[/b:6b1c509781]:
procedure PercorrerMenu(Menu: TMenuItem); var I: Integer; begin for I := 0 to Menu.Items.Count - 1 do begin ListBox.Items.Add(Menu.Items[I].Caption); if Menu.Items[I].Count > 0 then PercorrerMenu(Menu.Items[I]); end; end;
Independentemente da quantidade de menus e submenus existentes, todos serão listados.
[]´s[/quote:6b1c509781]
É isso ai, eu tava tentando chegar numa solução como estas e não conseguia, vlw [b:6b1c509781]Michael[/b:6b1c509781].
Gostei + 0
22/03/2006
Martins
procedure PercorrerMenu(Menu: TMenuItem); var I: Integer; begin for I := 0 to Menu.Items.Count - 1 do begin ListBox.Items.Add(Menu.Items[I].Caption); if Menu.Items[I].Count > 0 then PercorrerMenu(Menu.Items[I]); end; end;
Michael, desculpe-me se estiver fazendo besteira, mas a sua rotina não seria assim.
procedure PercorrerMenu(Menu: TMenuItem); var I: Integer; begin for I := 0 to Menu.Count -1 do // .Items.Count - 1 do begin Form1.ListBox1.Items.Add(Menu.Items[I].Caption); if Menu.Items[I].Count > 0 then PercorrerMenu(Menu.Items[I]); end; end;
Podendo ser usada assim, em conformidade com a do Adriano.
procedure TForm1.Button5Click(Sender: TObject); var I : Integer; begin ListBox1.Items.Clear; for I := 0 to MainMenu1.Items.Count-1 do begin ListBox1.Items.Add(MainMenu1.Items[I].Caption); PercorrerMenu(MainMenu1.Items[I]); end; end;
Espero q seja assim mesmo, do contrário estou ficando cada dia mais lerdo :D .
Valew :wink:
Gostei + 0
22/03/2006
Adriano Santos
Gostei + 0
22/03/2006
Michael
A rotina que eu indiquei só percorria os menus derivados de TMenuItem. Para vasculhar todo o MainMenu é necessário o uso de outro loop, como vc mesmo fez usando o código do [b:5a3458d23f]Adriano[/b:5a3458d23f].
Não postei antes pq achei que era óbvio, como vocês mesmos perceberam. Mas é bom ser explícito às vezes... ;-)
[]´s
Gostei + 0
22/03/2006
Adriano Santos
É isso ai, resolvemos o problema, trabalho em equipe, próximo...rs :D
Gostei + 0
23/03/2006
Minervasoft
por esta emorme ajuda
Silvio Coelho
Gostei + 0
23/03/2006
Martins
Tranquilo Michael, quando li seu código e percebi, tb notei q vc ao escrever o código estavam presentes duas coisas, escreveu o código fora do Delphi, apenas de cabeça não tendo tempo para compilar e testar devido suas tarefas aí no trampo ou q vc havia escrito o códigoe aquele fatal 1 segundo de distração havia sido o causador, mas nunca pensei se quer em questionar seu código, afinal, ele é funcional.
Abraço! :wink:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)