Работа с массивом компонентов

Материал из DRKB

Работа с массивом компонентов[править | править код]

Часто возникают вопросы о работе с массивом компонентов. Вот пример того как вывести список имен всех компонентов в приложении.


procedure TForm1.Button1Click(Sender: TObject);
var 
  i: Integer;
begin
  ListBox1.Items.Clear;
  for i := 0 to ComponentCount-1 do
    ListBox1.Items.Add(Components[i].Name);
end;


  • для поиска конкретного компонента по его имени используйте метод формы - FindComponent.
  • для поиска вышестоящего компонента воспользуйтесь функцией - FindGlobalComponent.

Примечание: в Delphi некоторые компоненты сами по себе являются контейнерами компонентов (GroupBox, Panel, PageControl, Form). В этом случае контейнер является родителем этих компонентов (Parent), а форма их владельцем (Owner). Для перехода по дочерних компонентах можно воспользоваться свойством Controls родителя компонентов. А для перехода независимо от родителя - используйте свойство Controls формы.

Смена владельца: свойство Owner - только для чтения, поэтому изменить его нельзя. Владелец устанавливается в ходе создания. Не стоит попросту изменять владельца или имя компонента. Но если есть такая необходимость можно воспользоватся методами: InsertComponent и RemoveComponent самого владельца. Эти методы нельзя применять в обработчике события формы.

Решение задачи:

procedure ChangeOwner(Component, NewOwner: TComponent);
begin
  Component.Owner.RemoveComponent(Component);
  NewOwner.InsertComponent(Component);
end;


пример использования:

procedure TForm1.ButtonChangeClick(Sender: TObject);
begin
  if Assigned(Button1) then 
  begin
    Button1.Parent := Form2;
    ChangeOwner(Button1.Form2);
  end;
end;


Source: Взято из http://forum.sources.ru
ID: 00359