Зависит от того, является ли это визуальным или невизуальным компонентом. Принцип тот же, но есть некоторые дополнительные соображения для каждого вида компонентов.
Для невизуальных компонентов
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;