[нуб, дельфи] добавить динамически множество контролов?

katrin75

Здравствуйте. В программе используется vcl. Требуется на форму добавить заранее неизвестное число объектов label и image. Можно ли в классе формы каким-нибудь образом задать динамические массивы из этих объектов?
Или хотябы можно ли добавлять объекты на форму в тексте программы по мере надобности?

katrin2201

Да, можно. Создаешь, прописываешь им парента и позицию, делаешь визибл, и вуаля.

katrin75

А можно пример кода плиз

katrin2201

http://www.google.ru/search?q=delphi+dynamically+create+cont...

procedure TForm1.AddNewButtonClick(Sender: TObject);
var
(* Pointer to the new button that we are going to create *)
NewButton : TButton;
begin
(*
This creates (in memory) the new button with the owner of it
being the form (self) so that the NewButton will be
destroyed automatically when the form is destroyed
*)

NewButton := TButton.create(self);

(*
By using the with statement on the new button we do not need to
to keep referencing its properties with NewButton. all the time
*)

with NewButton do
begin
(*
Set Top so that it appears underneath our two fixed buttons
*)
Top := 30;

(*
Make the width large enough to hold the caption
*)
Width := 60;

(*
This line takes a little more explanation. Every WinControl
has a ControlCount property which holds the number of
controls that are parented by it. So self.ControlCount will
return the number of controls on our form. We know of two of
these controls (our fixed buttons so by taking 2 off this we
have the number of NewButtons that we have created and
multiplying this by the width we have the left position of
the NewButton
*)

Left := Width * (self.ControlCount-2);

(*
This is the line that is most often forgotten, the parent
property should be set to the WinControl the button (or
any other component) is to be displayed on. In our case
this is self which will be the main form, if it is not
set your button will not be displayed
*)
Parent := self;

(*
This assigns the procedure CustomButtonClick (which will be
written later) to the OnClick event of the NewButton
*)
OnClick := CustomButtonClick;

(*
We calculate the button number as early, and add this to
the caption so that all of our new buttons will
have different captions
*)

Caption := 'Button '+ inttostr (self.ControlCount-2);
end; //With
end;

Andbar

Это ведь первый урок по созданию компонент во время исполнения.
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
for i:=0 to 99 do
with TLabel.Create(Self)do begin//если указать nil, компонента не уничтожится автоматом вместе с формой
//всякая настройка
Caption:=inttostr(i);
Top:=10*i;
Left:=5*i;
if Top+Height>Self.ClientHeight
then Top:=Top - Self.ClientHeight;
Parent:=Self;//без этого TLabel не будет знать, где она находится (т.е., не будет рисоваться)
end;
end;
С динамическим массивом, надеюсь, умеешь работать (это самые азы Object Pascal'я)

katrin75

Спасибо!
Оставить комментарий
Имя или ник:
Комментарий: