Propriedade quot;ComponentCountquot; - Mistério!!

Delphi

02/10/2004

Olá pessoal,

em um Form tenho um PageControl com 3 TabSheets.

Dentro de uma TabSheet tenho 5 Edits.

A minha dúvida é a seguinte: estou tentando recuperar a quantidade de componentes dentro de uma TabSheet da seguinte forma:

TabSheet.ComponentCount

porém sempre me retorna 0. Ora, se dentro da TabSheet em questão há 5 Edits como pode a propriedade ComponentCount estar retornando 0?

Abraços...
Anderson Dibo


Anddibo

Anddibo

Curtidas 0

Respostas

Tatuweb

Tatuweb

02/10/2004

Olá,

Já respondi uma dúvida desse tipo. Clique no lnk abaixo para ver uma solução.
:arrow: http://delphiforum.icft.com.br/forum/viewtopic.php?t=43638

Para chamar a função você usa:
ShowMessage (IntToStr (CompsParent (TabSheet3)));



GOSTEI 0
Anddibo

Anddibo

02/10/2004

valeu TatuWeb,

resolveu meu problema. Obrigado!! :D


Mas ainda continua no ar a questão do ´ComponentCount´. Seria um bug do Delphi? :(


Abraços...
Anderson Dibo


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

02/10/2004

tente

TabSheet.ControlCount


GOSTEI 0
Anddibo

Anddibo

02/10/2004

Valeu Emerson,

a propriedade ControlCount funciona legal. :D


Abraços...
Anderson Dibo


GOSTEI 0
Rômulo Barros

Rômulo Barros

02/10/2004

Olá, Já respondi uma dúvida desse tipo. Clique no lnk abaixo para ver uma solução. :arrow: http://delphiforum.icft.com.br/forum/viewtopic.php?t=43638 Para chamar a função você usa:
ShowMessage (IntToStr (CompsParent (TabSheet3)));


Muito legal, TatuWeb. Mas, por outro lado, vamos analisar a seguinte situação:

:arrow: [color=red:dd80ba43ab][b:dd80ba43ab]1 - Quero acessar todos o edits do meu form e alterar a propriedade Text de cada uma para ´Valor Teste´.[/b:dd80ba43ab][/color:dd80ba43ab]

...
Var
  C : Integer;
Begin
  For C := 0 To Form.ComponentCount -1 Do
  Begin
     If(Components[C] Is TEdit)Then
        TEdit(Components[C]).Text := ´Valor Teste´;
  End;
End;
...

:wink: [color=blue:dd80ba43ab][b:dd80ba43ab]Até aí, tudo bem. Consegui alterar todos os edits do meu form.[/b:dd80ba43ab][/color:dd80ba43ab]

:?: [color=darkred:dd80ba43ab][b:dd80ba43ab][u:dd80ba43ab]Mas, utilizando a sua function, como devo prosseguir para alterar a propriedade Text de todos os edits de apenas uma TabSheet?[/u:dd80ba43ab][/b:dd80ba43ab][/color:dd80ba43ab]


GOSTEI 0
Keitarosan

Keitarosan

02/10/2004

Bom, respondendo a dúvida do nosso amigo [b:5cea856a8f]anddibo[/b:5cea856a8f], pode ter certeza que isso não é bug, a explicação é bem simples, você não consegue acessar o tal edit pela propriedade ComponentCount ou Components do TabSheet pelo simples motivo que esses Edits foram criados pelo Form e nao pelo TabSheet... ou seja, eles ´pertencem´ ao Form...
Em tempo de desenvolvimento eu não sei criar objetos que nao pertençam ao Form, mas em Tempo de Execução tente isso aqui pra você entender o que eu digo:

evento onClick de um botao:
var
  Edit: TEdit;
begin
  Edit := TEdit.Create(TabSheet1); //Com o TabSheet1 como o parametro, você criará o Edit como sendo um componente pertencente do TabSheet1, independente de quem seja o "pai" dele...
  Edit.Parent := TabSheet1; //Sim, você precisa desta linha, você criou um componente pertencente ao TabSheet1, mas não falou quem seria o "pai" dele, se você omite esta informação, o componente não aparecerá...
  //feiro estas duas linhas acima, você tem 1 componente dentro do TabSheet, nesse momento a propriedade ComponentCount do TabSheet é igual a 1
end;

:wink: Entendeu o funcionamento da parada??

Agora qnt a pergunta do [b:5cea856a8f]Undeclared[/b:5cea856a8f],
Basta alterar um pokinho esta funcao para que ela fique do jeito que você quer, basta fazer isso daqui:
Var
  C : Integer;
Begin
  For C := 0 To Form.ComponentCount -1 Do
  Begin
    If (Components[C] Is TEdit) Then
      if (Components[C] as TEdit).Parent = TabSheet1 then
        TEdit(Components[C]).Text := ´Valor Teste´;
  End;
End;


Onde TabSheet1 é o tabSheet desejado.... ou painel, ou qualquer outro tipo de Container :D


GOSTEI 0
Rômulo Barros

Rômulo Barros

02/10/2004

Agora qnt a pergunta do [b:d254f3b780]Undeclared[/b:d254f3b780], Basta alterar um pokinho esta funcao para que ela fique do jeito que você quer, basta fazer isso daqui:
Var
  C : Integer;
Begin
  For C := 0 To Form.ComponentCount -1 Do
  Begin
    If (Components[C] Is TEdit) Then
      if (Components[C] as TEdit).Parent = TabSheet1 then
        TEdit(Components[C]).Text := ´Valor Teste´;
  End;
End;
Onde TabSheet1 é o tabSheet desejado.... ou painel, ou qualquer outro tipo de Container :D


:arrow: [color=blue:d254f3b780][b:d254f3b780]Beleza, Cara !! Deu certinho mesmo !![/b:d254f3b780][/color:d254f3b780]

[b:d254f3b780]Ass:[/b:d254f3b780] [color=blue:d254f3b780][u:d254f3b780][i:d254f3b780]Undeclared Identifier[/i:d254f3b780] - Em exibição nos cinemas[/u:d254f3b780][/color:d254f3b780]


GOSTEI 0
POSTAR