Preciso ler todos os componentes dentro de um painel por exemplo

Delphi

02/09/2013

Pessoal, preciso ler todos os componentes dentro de um painel.

Qual seria a melhor maneira para isto, pois abaixo le todos, tenho q le apenas os q tiverem dentro de um painel XXX por exemplo e q nao perca performance, pois se validar dentro deste for abaixo, tem mto componente na tela e teremos um tempo demorado.


for i := 0 to ComponentCount -1 do
begin
Memo2.Lines.Add(IntToStr(i) + ' - ' + Components[i].GetNamePath + ' - ' + Components[i].ClassName);
end;

Alguma dica?

Grato
Alessandro Yamasaki

Alessandro Yamasaki

Curtidas 0

Melhor post

Rafael Cunha

Rafael Cunha

02/09/2013

Tenta da seguinte maneira

procedure TForm1.Button1Click(Sender: TObject);
var
  Idx: Integer;
begin
  for Idx := 0 to ComponentCount - 1 do
    if Components[Idx].GetParentComponent = Panel1 then
      ShowMessage('Nome: ' + Components[Idx].Name);
end;
GOSTEI 1

Mais Respostas

Deivison Melo

Deivison Melo

02/09/2013

Boa noite Alessandro,

O Código passado pelo amigo Rafael Dani da Cunha

Está corretíssimo!!!

Parabéns Rafael Dani da Cunha!!!!

Estou colocando o posto como concluído!!!

Abração e bons códigos!!

GOSTEI 0
Marco Salles

Marco Salles

02/09/2013

Pessoal, preciso ler todos os componentes dentro de um painel.

Qual seria a melhor maneira para isto, pois abaixo le todos, tenho q le apenas os q tiverem dentro de um painel XXX por exemplo e q nao perca performance, pois se validar dentro deste for abaixo, tem mto componente na tela e teremos um tempo demorado.


Alessandro , se o problema for Performance , vc tem que colocar em prática dois conceitos distintos ... O Owner e o Parent . Invariavelmente os controles adicionados dentro do Panel
são de propriedades do Formulário , a não ser que vc especifique de modo diferente , porém o Parent desses formulários são o Panel . Logo para performance vc deve percorrer os
Parentes do Panel ...

for i := 0 to pred(Panel_a_ser_testado.ControlCount) do
 Showmessage(Panel_a_ser_testado.Controls[i].Name);


[]sds
GOSTEI 0
Marco Salles

Marco Salles

02/09/2013

Pessoal, preciso ler todos os componentes dentro de um painel.

Qual seria a melhor maneira para isto, pois abaixo le todos, tenho q le apenas os q tiverem dentro de um painel XXX por exemplo e q nao perca performance, pois se validar dentro deste for abaixo, tem mto componente na tela e teremos um tempo demorado.


Alessandro , se o problema for Performance , vc tem que colocar em prática dois conceitos distintos ... O Owner e o Parent . Invariavelmente os controles adicionados dentro do Panel
são de propriedades do Formulário , a não ser que vc especifique de modo diferente , porém o Parent desses CONTROLES são o Panel . Logo para performance vc deve percorrer os
Parentes do Panel ...

for i := 0 to pred(Panel_a_ser_testado.ControlCount) do
 Showmessage(Panel_a_ser_testado.Controls[i].Name);


[]sds


*** Escrevi errado e não consigo editar

[]sds
GOSTEI 0
Alessandro Yamasaki

Alessandro Yamasaki

02/09/2013

Tinha me esquecido do GetParentComponent . Isto mesmo. Grato pelas informações de todos os colegas e pode encerrar o tópico.

Att

Alessandro
GOSTEI 0
Marco Salles

Marco Salles

02/09/2013

Tinha me esquecido do GetParentComponent . Isto mesmo. Grato pelas informações de todos os colegas e pode encerrar o tópico.

Att

Alessandro


Hummmm ... ?????

Mas se vc utilizar a Lista do Proprietário e testar Individualmente se esses Componentes tem algum Controle que são parentes do PANEL XXX , vc não esta ganhando performance ???

Muito pelo contrário , vc estará testando ate mesmo Componentes do formulário que não são Controles , como é o caso de DataSet , DataSetprovider, ClientDataSet
e um infinidade

ou entendi errado ???

desculpe a teimosia mas sua dúvida de hj pode ser a minha ou de outros amanhã

[]sds

GOSTEI 0
Alessandro Yamasaki

Alessandro Yamasaki

02/09/2013

Realmente Marco, não vi seus comentários, mas em relação de performance, vai ler todos mesmos e não sendo interessante.
GOSTEI 0
Marco Salles

Marco Salles

02/09/2013

Realmente Marco, não vi seus comentários, mas em relação de performance, vai ler todos mesmos e não sendo interessante.


então Alessandro ..|Como eu venho Falando . Basta percorrer os Parentes do Próprio TPanel



for i := 0 to pred(PanelXXX.ControlCount) do
 Showmessage(PanelXXX.Controls[i].Name);


entendeu ????

[]sds
GOSTEI 0
Alessandro Yamasaki

Alessandro Yamasaki

02/09/2013

Perfeito. Vou testar aqui. Valeu. Abraços
GOSTEI 0
POSTAR