Fórum TMainMenu - listar todos os items #316891

21/03/2006

0

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


Minervasoft

Minervasoft

Responder

Posts

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;



Responder

Gostei + 0

21/03/2006

Martins

[quote:89c2a4b943=´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;
[/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.

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.


Responder

Gostei + 0

21/03/2006

Adriano Santos

blz camarada, o problema é que se tiverem muitos submenus ai a gente dança, tem que fazer um monte de For.


Responder

Gostei + 0

22/03/2006

Minervasoft

com esses código resolvo o me problema...


muito obrigado......

Silvio Coelho


Responder

Gostei + 0

22/03/2006

Martins

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


Responder

Gostei + 0

22/03/2006

Michael

[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]:

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


Responder

Gostei + 0

22/03/2006

Martins

[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.


Responder

Gostei + 0

22/03/2006

Adriano Santos

[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].


Responder

Gostei + 0

22/03/2006

Martins

É para isso que servem as [b:e53469a147]rotinas recursivas[/b:e53469a147]:
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


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:


Responder

Gostei + 0

22/03/2006

Adriano Santos

É isso ai Martins, funcionou...acho que to ficando lerdo tb, fiquei uns 10 minutos tentando adaptar...rsrs. :D


Responder

Gostei + 0

22/03/2006

Michael

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


Responder

Gostei + 0

22/03/2006

Adriano Santos

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


Responder

Gostei + 0

23/03/2006

Minervasoft

Muito obrigado a voces, Adriano, Martins e Michael....

por esta emorme ajuda

Silvio Coelho


Responder

Gostei + 0

23/03/2006

Martins

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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar