Bom, certamente alguma vez você já pensou em implementar um módulo de segurança em seu sistema, onde você iria listar todos os itens do seu menu em uma árvore (TreeView) e permitir que um administrador faça a manutenção das permissões, mas como listo todos estes itens do menu no TreeView? É o que veremos agora.
Crie uma nova aplicação e adicione ao formulário os seguintes componentes:
- Um componente MainMenu onde deverá criar uma pequena estrutura de itens, por exemplo:
| Arquivo | Cadastros | Ajuda
:Abrir....|:Cidades...|:Sobre o Sistema
:Salvar...|:Clientes
:Sair.....|:Produtos
- Um Button ao topo do formulário que utilizaremos para a listagem dos itens de menu na TreeView;
- Um componente TreeView que será utilizado para exibir os itens do menu.
Acesse o código da aplicação e faça a declaração da seguinte procedure que será a encarregada de ler os itens do menu e adicionar os nodes na TreeView:
procedure PreencherMenus(Menu: TMainMenu);
Em seguida, utilizando as teclas Ctrl+Shift+C faça a implementação do procedimento adicionando a ele o código a seguir:
procedure TForm1.PreencherMenus(Menu: TMainMenu);
var
i,j,p,imgS: integer;
a,b: string;
mI,mS: TMenuItem;
n,sn: TTreeNode;
begin
TreeView1.Items.Clear;
sn := nil;
for i := 0 to Menu.Items.Count - 1 do
begin
mI := Menu.Items[i];
a := mI.Caption; // Titulos do menus
p := pos('&',a);
if p > 0 then
Delete(a,p,1);
n := TreeView1.Items.Add(sn,a); //nó
for j := 0 to mI.Count - 1 do
begin
mS := mI.Items[j];
b := mS.Caption; // Titulos dos sub-menus
p := pos('&',b);
if p > 0 then
Delete(b,p,1);
if b <> '-' then
begin
TreeView1.Items.AddChild(n,b);
end;
end;
end;
for I := 0 to TreeView1.Items.Count - 1 do
if TreeView1.Items[i].Level <> 0 then
TreeView1.Items[i].StateIndex := 1;
end;
Implementado o procedimento que lê os itens de menu um a um e cria nós a serem adicionado no TreeView vamos chamar o procedimento no evento OnClick do botão, adicionando a ele o seguinte código:
procedure TForm1.Button1Click(Sender: TObject);
begin
PreencherMenus(MainMenu1);
TreeView1.FullExpand;//Abre toda a lista de itens
end;
Bom, dessa forma você poderá implementar agora sua próprias funcionalidades à sua aplicação integrando os componentes MainMenu e TreeView. Abraço e até o próximo post.
6 comentários:
Parabéns, você é fodástico, ia demorar um tempinho fazendo isso...
Vlew
kra, tu não é fodastico não, tua função só consegui ir até o primeiro nivel do menu, passou de 1 nivel fudeu. Uma pena, vou fazer ela funcionar. Abraços.
Pronto, arrumei. Algo semelhante abaixo cria a treeview recursivamente e com todas as quebras de menu. Abraços.
procedure TfrmAtalhos.CarregaMenu(Menu: TMenuItem;Node: TTreeNode);
Var
iCont : Integer;
NodePai : TTreeNode;
begin
for iCont := 0 to Menu.Count-1 do
begin
NodePai := trvMenus.Items.AddChild(Node,StringReplace(Menu.Items[iCont].Caption,'&','',[rfReplaceAll, rfIgnoreCase]));
if Menu.Items[iCont].Count > 0 then
CarregaMenu(Menu.Items[iCont],NodePai);
end;
end;
Prezado Marlon, acho que dessa vez a questão não foi eu não ser tão "fodástico", mas você poderia ter sido pouco mais esperto e ver o post que fiz logo após a esse que você leu, onde mostrei como ler os itens com o método recursivo.
Veja no link:
http://maikelscheid.blogspot.com/2009/05/exibir-itens-de-mainmenu-em-treeview_06.html
Mesmo assim, vou testar tua função, parece mais simplificada que o método que usei. Um ótimo 2011.
Como inserir um checkbox no treeview?
Queria adicionar um checkbox no treeview.
Postar um comentário