Это зависит от того, является ли это визуальным или невизуальным компонентом. Принцип тот же, но есть некоторые дополнительные соображения для каждого вида компонента.
Для невизуальных компонентов
var
C: TMyComponent;
begin
C := TMyComponent.Create(nil);
try
C.MyProperty := MyValue;
//...
finally
C.Free;
end;
end;
Для визуальных компонентов:
По сути визуальные компоненты создаются так же, как и невизуальные компоненты. Но вы должны установить некоторые дополнительные свойства, чтобы сделать их видимыми.
var
C: TMyVisualComponent;
begin
C := TMyVisualComponent.Create(Self);
C.Left := 100;
C.Top := 100;
C.Width := 400;
C.Height := 300;
C.Visible := True;
C.Parent := Self; //Any container: form, panel, ...
C.MyProperty := MyValue,
//...
end;
Несколько пояснений к приведенному выше коду:
- Установив владельца компонента (параметр конструктора), компонент уничтожается, когда форма собственности уничтожается.
- Установка
Parent
свойства делает компонент видимым. Если вы забудете, ваш компонент не будет отображаться. (Легко пропустить этот :))
Если вы хотите, чтобы многие компоненты могли делать то же самое, что и выше, но в цикле:
var
B: TButton;
i: Integer;
begin
for i := 0 to 9 do
begin
B := TButton.Create(Self);
B.Caption := Format('Button %d', [i]);
B.Parent := Self;
B.Height := 23;
B.Width := 100;
B.Left := 10;
B.Top := 10 + i * 25;
end;
end;
Это добавит 10 кнопок в левой части формы. Если вы хотите изменить кнопки позже, вы можете сохранить их в списке. ( TComponentList наилучшим образом подходит, но также взгляните на предложения из комментариев к этому ответу)
Как назначить обработчики событий:
Вы должны создать метод обработчика событий и присвоить ему свойство события.
procedure TForm1.MyButtonClick(Sender: TObject);
var
Button: TButton;
begin
Button := Sender as TButton;
ShowMessage(Button.Caption + ' clicked');
end;
B := TButton.Create;
//...
B.OnClick := MyButtonClick;