Controle de Acesso por Usuário

26/04/2021

0

Galera bom dia, eu queria realizar o controle de acesso as telas por usuário, eu não queria usar nenhum componente externo apenas os da VLC mesmo. A minha ideia era cadastrar as telas no BD, e a permissão S / N do usuário, porém quando eu faço um for p/ percorrer todos os itens do MainMenu ele não pega os itens do SubMenu, para isso acontecer eu sempre tenho que ficar criando for em baixo de for... tem alguma maneira de fazer ele sempre percorrer todos os itens independente de quantos SubMenu exista? Ou então um outro jeito de criar o controle de usuários? Estou usando Delphi + FB
Paulo

Paulo

Responder

Posts

26/04/2021

Emerson Nascimento

veja se o item de menu tem subitens e os leia, em cascata.


Responder

26/04/2021

Paulo

veja se o item de menu tem subitens e os leia, em cascata.


E como validar essa condição? Não encontrei nenhuma condição para validar se o item tem submenu ou não, como fazer isso? O problema de fazer isso é que cada vez que eu acrescentar um novo submenu eu teria que fazer um novo for né?
Responder

26/04/2021

Emerson Nascimento


publique aqui o código que você usa para pegar o item do menu
Responder

26/04/2021

Paulo


publique aqui o código que você usa para pegar o item do menu


  for i:=0 to MainMenu1.Items.Count-1 do begin
    MainMenu1.Items[i].Name
  end;


Estou fazendo assim...
Responder

27/04/2021

Emerson Nascimento

Estou fazendo assim...

não. não está.
esse código que você postou não faz nada.

de qualquer forma, seguem duas formas de fazer (o princípio é o mesmo, só muda a apresentação):
var
  arrayItems: array of string;
  i: integer;
  mensagem: string;

  function iif(condition: boolean; iftrue: variant; iffalse: variant): variant;
  begin
    if condition then
      result := iftrue
    else
      result := iffalse;
  end;

  procedure PegaItems(Item: TMenuItem);
  var
    j: integer;
  begin
    SetLength(arrayItems, Length(arrayItems)+1);
    arrayItems[High(arrayItems)] := Item.Caption;
    if Item.Count > 0 then
      for j := 0 to Item.Count-1 do
        PegaItems(Item.Items[j]);
  end;

  procedure PegaItems2(Pai: string; Item: TMenuItem);
  var
    j: integer;
  begin
    SetLength(arrayItems, Length(arrayItems)+1);
    arrayItems[High(arrayItems)] := iif(Pai>'',Pai+'>','')+Item.Caption;
    if Item.Count > 0 then
      for j := 0 to Item.Count-1 do
        PegaItems2(iif(Pai>'',Pai+'>','')+Item.Caption,Item.Items[j]);
  end;
begin
  for i := 0 to MainMenu1.Items.Count-1 do
     PegaItems(MainMenu1.Items[i]);

  mensagem := '';
  for i := Low(arrayItems) to High(arrayItems) do
    mensagem := mensagem + arrayItems[i] + ', ' + #13

  MessageDlg(mensagem, mtWarning, [mbOk], 0);

  SetLength(arrayItems, 0);
  for i := 0 to MainMenu1.Items.Count-1 do
     PegaItems2('', MainMenu1.Items[i]);

  mensagem := '';
  for i := Low(arrayItems) to High(arrayItems) do
    mensagem := mensagem + arrayItems[i] + ', ' + #13

  MessageDlg(mensagem, mtWarning, [mbOk], 0);

end;
Responder

27/04/2021

Paulo

Estou fazendo assim...

não. não está.
esse código que você postou não faz nada.

de qualquer forma, seguem duas formas de fazer (o princípio é o mesmo, só muda a apresentação):
var
  arrayItems: array of string;
  i: integer;
  mensagem: string;

  function iif(condition: boolean; iftrue: variant; iffalse: variant): variant;
  begin
    if condition then
      result := iftrue
    else
      result := iffalse;
  end;

  procedure PegaItems(Item: TMenuItem);
  var
    j: integer;
  begin
    SetLength(arrayItems, Length(arrayItems)+1);
    arrayItems[High(arrayItems)] := Item.Caption;
    if Item.Count > 0 then
      for j := 0 to Item.Count-1 do
        PegaItems(Item.Items[j]);
  end;

  procedure PegaItems2(Pai: string; Item: TMenuItem);
  var
    j: integer;
  begin
    SetLength(arrayItems, Length(arrayItems)+1);
    arrayItems[High(arrayItems)] := iif(Pai>'',Pai+'>','')+Item.Caption;
    if Item.Count > 0 then
      for j := 0 to Item.Count-1 do
        PegaItems2(iif(Pai>'',Pai+'>','')+Item.Caption,Item.Items[j]);
  end;
begin
  for i := 0 to MainMenu1.Items.Count-1 do
     PegaItems(MainMenu1.Items[i]);

  mensagem := '';
  for i := Low(arrayItems) to High(arrayItems) do
    mensagem := mensagem + arrayItems[i] + ', ' + #13

  MessageDlg(mensagem, mtWarning, [mbOk], 0);

  SetLength(arrayItems, 0);
  for i := 0 to MainMenu1.Items.Count-1 do
     PegaItems2('', MainMenu1.Items[i]);

  mensagem := '';
  for i := Low(arrayItems) to High(arrayItems) do
    mensagem := mensagem + arrayItems[i] + ', ' + #13

  MessageDlg(mensagem, mtWarning, [mbOk], 0);

end;


Era exatamente isso que eu precisava, vou adaptar o código para meu uso. Muito Obrigado.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar