RAD Studio VCL Reference
ContentsIndex
PreviousUpNext
TComponent.Components Property

Lists all components owned by the component.

Pascal
property Components [Index: Integer]: TComponent;
C++
__property TComponent * Components[int Index];

Use Components to access any of the components owned by this component, such as the components owned by a form. The Components property is most useful when referring to owned components by number rather than name. It is also used internally for iterative processing of all owned components. 

Index ranges from 0 to ComponentIndex minus 1.  

C++ Examples: 

 

/*
This code fragment moves any nonvisual components on the 
form into a separate data module. Note that the components 
are removed starting with the last component, so that the 
unprocessed portion of the Components array does not change.
Note: This code does not save the form or data module to disk
after the nonvisual components are moved.  If executed at 
runtime, the effect will not persist.
Add a second TForm and name it ComponentCount2.  Put 
"#include ComponentCount2.cpp" in ComponentCount.h.  
Place a TMemo in each form and a TButton in Form1.
*/

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int I;
  TComponent *Temp;
  Memo1->Lines->Add("Components removed: ");
  Form2->Memo1->Lines->Add("Components added: ");
  for (I = ComponentCount - 1; I >= 0; I--)
  {
    Temp = Components[I];
    // only move components that are not controls
    if (dynamic_cast<TControl *>(Temp) == NULL)
    {
      RemoveComponent(Temp);
      Memo1->Lines->Add(Temp->Name);
      Form2->InsertComponent(Temp);
      Form2->Memo1->Lines->Add(Temp->Name);
    }
  }
}

 

Delphi Examples: 

{
This code fragment moves any nonvisual components on the 
form into a separate data module. Note that the components 
are removed starting with the last component, so that the 
unprocessed portion of the Components array does not change.
Note: This code does not save the form or data module to disk
after the nonvisual components are moved.  If executed at 
runtime, the effect will not persist.
Add a second TForm and name it ComponentCount2.  Put 
"ComponentCount2" at the end of the uses clause of Form1.  
Place a TMemo in each form and a TButton in Form1.
} 

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Temp: TComponent;
begin
  Form1.Memo1.Lines.Add('Components removed: ');
  Form2.Memo1.Lines.Add('Components added: ');
  for I := ComponentCount - 1 downto 0 do
  begin
    Temp := Components[I];
    if not (Temp is TControl) then
    begin
      RemoveComponent(Temp);
      Form1.Memo1.Lines.Add(Temp.Name);
      Form2.InsertComponent(Temp);
      Form2.Memo1.Lines.Add(Temp.Name);
    end;
  end;
end;

 

Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
What do you think about this topic? Send feedback!