Delphi FAQ - Как правильно создавать компоненты в run-time?

ОГЛАВЛЕНИЕ


Как правильно создавать компоненты в run-time?

Как правильно создавать компоненты в run-time? Что задавать в
   качестве параметра Owner при создании компоненты? Как обрабатывать
   события от созданных компонент, типа нажатий на кнопки?

Hачнем с создания.

Сущность свойства Owner в том, что владелец перед смертью уничтожает (через
Free) принадлежащие ему объекты. Таким образом, все зависит от того, кому вы
хотите доверить уничтожение созданных форм/компонентов. В частности, если вы
сами будете этим заниматься, то AOwner может быть, например, nil.

Для того, чтобы созданный компонент появился на экране, надо указать его
родителя, заполнив свойство Parent, например, NewButton.Parent := Form1;

Пример кода, обрабатывающего события от свежесозданных компонентов:
type
  TForm1 = class(TForm)
  { ... }
  private
    { эта процедура будет вызываться при нажатии на кнопку }
    procedure ButtonClicked(Sender : TObject);

  public
    { в этой процедуре происходит создание кнопки }
    procedure CreateButton;

  end;

{ ... }

procedure TForm1.CreateButton;
var
  btn : TButton;
begin
  btn := TButton.Create(Self);  { Уничтожать кнопку будет форма }
  btn.Parent := Self;           { Родителем кнопки будет форма }
  btn.OnClick := ButtonClicked; { Процедура, которая будет исполняться при }
  btn.Visible := true;          { нажатии на кнопку }
end;