TMainMenu - listar todos os items
Boa tarde a todos,
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
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
Curtidas 0
Respostas
Adriano Santos
21/03/2006
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
Martins
21/03/2006
[quote:89c2a4b943=´Adriano Santos´][/quote:89c2a4b943]
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.
Boa sorte.
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
Adriano Santos
21/03/2006
blz camarada, o problema é que se tiverem muitos submenus ai a gente dança, tem que fazer um monte de For.
GOSTEI 0
Minervasoft
21/03/2006
com esses código resolvo o me problema...
muito obrigado......
Silvio Coelho
muito obrigado......
Silvio Coelho
GOSTEI 0
Martins
21/03/2006
com esses código resolvo o me problema...
muito obrigado......
Silvio Coelho
hehehehe :D
Blz [b:97d1cfbf18]Silvio Coelho[/b:97d1cfbf18], [b:97d1cfbf18]Adriano[/b:97d1cfbf18] aí teriamos q mudar o algoritmo hehe.
Valew
GOSTEI 0
Michael
21/03/2006
[quote:5788447c9f=´Adriano Santos´]o problema é que se tiverem muitos submenus ai a gente dança, tem que fazer um monte de For.[/quote:5788447c9f]
Não!!!
É para isso que servem as [b:5788447c9f]rotinas recursivas[/b:5788447c9f]:
Independentemente da quantidade de menus e submenus existentes, todos serão listados.
[]´s
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
Martins
21/03/2006
[quote:e7a19e958e=´Adriano Santos´]o problema é que se tiverem muitos submenus ai a gente dança, tem que fazer um monte de For.
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
Adriano Santos
21/03/2006
[quote:6b1c509781=´Adriano Santos´]o problema é que se tiverem muitos submenus ai a gente dança, tem que fazer um monte de For.
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
Martins
21/03/2006
É para isso que servem as [b:e53469a147]rotinas recursivas[/b:e53469a147]:
Independentemente da quantidade de menus e submenus existentes, todos serão listados.
[]´s
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
Adriano Santos
21/03/2006
É isso ai Martins, funcionou...acho que to ficando lerdo tb, fiquei uns 10 minutos tentando adaptar...rsrs. :D
GOSTEI 0
Michael
21/03/2006
Sua observação está correta [b:5a3458d23f]Martins[/b:5a3458d23f]. Eu escrevi o código de cabeça e não o compilei.
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
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
Adriano Santos
21/03/2006
Sua observação está correta [b:a0d584800e]Martins[/b:a0d584800e]. Eu escrevi o código de cabeça e não o compilei.
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:a0d584800e]Adriano[/b:a0d584800e].
Não postei antes pq achei que era óbvio, como vocês mesmos perceberam. Mas é bom ser explícito às vezes... ;-)
[]´s
É isso ai, resolvemos o problema, trabalho em equipe, próximo...rs :D
GOSTEI 0
Minervasoft
21/03/2006
Muito obrigado a voces, Adriano, Martins e Michael....
por esta emorme ajuda
Silvio Coelho
por esta emorme ajuda
Silvio Coelho
GOSTEI 0
Martins
21/03/2006
Sua observação está correta [b:a12f40681f]Martins[/b:a12f40681f]. Eu escrevi o código de cabeça e não o compilei.
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:a12f40681f]Adriano[/b:a12f40681f].
Não postei antes pq achei que era óbvio, como vocês mesmos perceberam. Mas é bom ser explícito às vezes... ;-)
[]´s
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