Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fred-2011

MainMenu

Recommended Posts

Bom dia,

 

exemplo cadastro o usuario e neste cadastro tem um campo da tabela que é um campo logico(sim/não )certo.....Ai quando a pessoa loga e este campo estiver TICADO(true) ele libera o menu e se estiver apagado(false )ele não libera.

 

Quero fazer um MainMenu dinâmico. Gravando os itens no banco e escolher o que o usuário tem ou não acesso.

 

Achei esse trecho de código, mas não entendi direito o que faz. É de um post aqui mesmo, do Hugo

 

procedure TForm1.Button1Click(Sender: TObject);
Var i,j,w : Integer;
begin
 //Grava na tabela de Permissão os itens do menu...
 For i := 0 to MainMenu1.Items.Count - 1 do
 Begin
  TblPermissaoCampo.Value := (MainMenu1.Items[i].Caption);

  For j := 0 to MainMenu1.Items[i].Count - 1 do
  Begin
	TblPermissaoCampo.Value := (MainMenu1.Items[i].Items[j].Caption);

	For w := 0 to MainMenu1.Items[i].Items[j].Count - 1 do
	Begin
			  TblPermissaoCampo.Value := (MainMenu1.Items[i].Items[j].Items[w].Caption);
	End;

  End;
 End;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Fred,

 

Estou usando o componente dbexpress.

Na verdade nesses trechos de código ele teve a ideia de inserir no DB todos os menus e sub menus, do sistema.

Mas para você verificar se o funcionário tem ou não permissão você pode criar uma precedure simples,

 

Procedure Carrega_Menu(Menu: TdxBarManager);
var
 i : integer;
begin
   For i:=0 to Menu.ItemCount -1 do
    begin
     query.Close;
     query.SQL.Clear;
     query.SQL.Add('SELECT MENUS.* FROM MENUS');
     query.SQL.Add('INNER JOIN FUNCIONARIOS_MENU ON (FUNCIONARIOS_MENU.TAG = MENUS.TAG)');
     query.SQL.Add('WHERE MENUS.TAG = '+IntToStr(Menu.Items[i].Tag));
     query.Open;

     Conforme for encontrando os menus referente aquele funcionario você vai tratar ele para habilitar assim.
     if query.recordcount > 0 then
       begin    
          If query.Locate('TAG',Menu.Items[i].Tag,[]) then
            begin
              Menu.Items[i].Visible := ivAlways;
              Menu.Items[i].Enabled := q.FieldByName('HABIL').AsString = 'S';
              Menu.Items[i].Caption := q.FieldByName('DESCR').AsString;
          end else
             begin
               Menu.Items[i].Visible := ivNever;
             end;
       end;

    end;

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como posso montar a tabela para isso, uso access. Teria como me ajudar a montar? Não entendi direito esse código. É um pouco complicado isso, não é? To querendo saber como faz desde a montagem da tabela pra entender. Meu email é: frederico.brigatte@itelefonica.com.br, caso tenha algum exemplo simples que possa mandar pra ajudar. Agradeço por hora.

 

Fred

Compartilhar este post


Link para o post
Compartilhar em outros sites

De acordo com o código do fabricio, ele tem uma tabela que armazena a descrição do menu e a situacao dele para o usuário, então, a tabela deve ser mais ou menos assim:

 

Tabela Menu
 TAG int not null;
 HABIL Varchar(1) not null default 'S'
 DESCR varchar(20) not null;

 

e uma outra tabela que armazena o valor do campo TAG listado acima e relaciona com funcionario:

tabela FUNCIONARIOS_MENU
 TAG int not Null
-- Outros campos

 

 

Ao realizar a consulta, faz a verificação se TAG para aquele funcionário está com o camp HABIL marcado como S, se estiver, marca o ítem do menu como Visible = True, se não, marca como False;

Compartilhar este post


Link para o post
Compartilhar em outros sites

De acordo com o código do fabricio, ele tem uma tabela que armazena a descrição do menu e a situacao dele para o usuário, então, a tabela deve ser mais ou menos assim:

 

Tabela Menu
 TAG int not null;
 HABIL Varchar(1) not null default 'S'
 DESCR varchar(20) not null;

 

e uma outra tabela que armazena o valor do campo TAG listado acima e relaciona com funcionario:

tabela FUNCIONARIOS_MENU
 TAG int not Null
-- Outros campos

 

 

Ao realizar a consulta, faz a verificação se TAG para aquele funcionário está com o camp HABIL marcado como S, se estiver, marca o ítem do menu como Visible = True, se não, marca como False;

 

No código do Fabrício, onde está a rotina que grava na tabela a descrição do menu?

 

Como posso montar o banco simples, por exemplo: Usuarios, Menu, .. para utilizar esse exemplo? Uso access. To meio perdido nessa parte. Pode me ajudar a montar esse banco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A gravação não foi postada, apenas a busca para fazer a verificão.

 

Imagine que você terá que criar uma janela que, com um usuário selecionado (seja nesta janela ou em uma janela anterior) você terá uma lista com todos os menus e para cada um deles você terá que marcar se está habilitado ou não, isto pode ser feito com checkbox, com combobox ou dentro de um stringGrid mesmo.

 

Ao gravar os dados, você irá criar um loop para gravar a situação de cada ítem. Este loop irá montar sua query que irá gravar no banco de dados a situação de cada ítem, portanto:

//O real funcionamento deste loop irá depender do que você for escolher para criar a interface.
 for I:= 1 to {último ítem} do
   begin
     if {ItemPermito} then
       Permitido := 'S' //Variável de exemplo
     else
       Permitodo := 'N';
     adoQuery.Sql.clear;
     adoQuery.SQl.add('Insert into Menu (tag, habil) Values (' + QuotedStr(IntToStr(Funcionario)) + ', ' + QuotedStr(Permitido) + ')');
     adoQuery.ExecSql;
   end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

A gravação não foi postada, apenas a busca para fazer a verificão.

 

Imagine que você terá que criar uma janela que, com um usuário selecionado (seja nesta janela ou em uma janela anterior) você terá uma lista com todos os menus e para cada um deles você terá que marcar se está habilitado ou não, isto pode ser feito com checkbox, com combobox ou dentro de um stringGrid mesmo.

 

Ao gravar os dados, você irá criar um loop para gravar a situação de cada ítem. Este loop irá montar sua query que irá gravar no banco de dados a situação de cada ítem, portanto:

//O real funcionamento deste loop irá depender do que você for escolher para criar a interface.
 for I:= 1 to {último ítem} do
   begin
     if {ItemPermito} then
       Permitido := 'S' //Variável de exemplo
     else
       Permitodo := 'N';
     adoQuery.Sql.clear;
     adoQuery.SQl.add('Insert into Menu (tag, habil) Values (' + QuotedStr(IntToStr(Funcionario)) + ', ' + QuotedStr(Permitido) + ')');
     adoQuery.ExecSql;
   end;

 

Como faço para gravar na tabela os menus? E como depois de gravar, montar o treeview?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, acredito que o que você precisa é um controle de acesso ao seu programa ? Tipo user 1 usar N funcções do programa e user 2 esta restrito e assim vai.

 

Caso seja, você pode usar o usercontrol, ele vai atender a suas necessidades.

 

http://www.google.com.br/search?num=100&hl=pt-BR&newwindow=1&client=firefox-a&hs=ana&sa=X&ei=Aql6TuORI8ugtwe4p7nvDw&ved=0CBcQBSgA&q=user+control+delphi&spell=1&biw=1024&bih=570

 

Obs: Mas acho que não funciona no access !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de fazer isso na mão para ter conhecimento do componente. Preciso montar um treeview com dados de um banco.

 

Dados da tabela:

 

Menu_Codigo

Menu_Caption

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.