como listar os controles do formulario de forma hierarquica

Delphi

18/01/2007

Olá, estou listando os controles do formulário conforme abaixo, o problema é que nao consigo lista-los de forma hierarquica, Ex.:

Form, dentro dele todos os painels
Panels, dentro dele todos os edit, botoes, etc.
Menu, dentro dele todos tmenuitens.

Como conseguir isso ?

Obrigado.




var
s: TStringList;

begin

s := TStringList.Create;

with TForm1 do
begin

for I := 0 to ComponentCount - 1 do
begin

oComponent := Components[I];

s.Add(oComponent.Name);

end;

end;

s.Free;

end;


Src68

Src68

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

18/01/2007

mas você quer a saída numa stringlist de que forma? dê um exemplo.
ou seria melhor num treeview?


GOSTEI 0
Src68

Src68

18/01/2007

emerson acho q o melhor mesmo seria num treeview, estou tentando fazer um controle de acesso por usuário, quero listar todos os controles num treeview ( o tstringlist foi só um exemplo), e escolher quais constaram do meu controle.

Obrigado.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

18/01/2007

tente com essa procedure:
procedure TForm1.montaTreeView(Arvore: TTreeView; Item: TTreeNode; Componente: TWinControl);
var
  i: integer;
  No: TTreeNode;
begin
  if Item <> nil then
    No := Arvore.Items.AddChild( Item, Componente.Name )
  else
    No := Arvore.Items.Add( Item, Componente.Name );

  for i := 0 to Componente.ControlCount-1 do
    if (Componente.Controls[i] is TWinControl) then
      montaTreeView(Arvore, No, TWinControl(Componente.Controls[i]));
end;

o uso é bem simples. basta executar:

[i:b1d95652f3]montaTreeView( [/i:b1d95652f3][b:b1d95652f3]NomeDaTreeViewOndeSeraExibidaAHierarquia[/b:b1d95652f3], nil, Self[i:b1d95652f3] );[/i:b1d95652f3]

no exemplo acima eu passo o formulário ativo (Self), mas no lugar dele você pode passar qualquer componente herdado da classe TWinControl (PageControl, GroupBox, Panel, etc).
a hierarquia será exibida na treeview passada no primeiro parâmetro.


GOSTEI 0
POSTAR