Fórum Controle de Acesso por Usuário #615612
26/04/2021
0
Paulo
Curtir tópico
+ 0Posts
26/04/2021
Emerson Nascimento
Gostei + 0
26/04/2021
Paulo
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é?
Gostei + 0
26/04/2021
Emerson Nascimento
publique aqui o código que você usa para pegar o item do menu
Gostei + 0
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...
Gostei + 0
27/04/2021
Emerson Nascimento
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;
Gostei + 0
27/04/2021
Paulo
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)