Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > динамическое создание Label


Автор: vicq 14.11.2007, 19:57
задается количество Label'ов , нужно их создать на форме. не работает. подскажите что добавить?

Код
procedure TForm1.Button1Click(Sender: TObject);
var i,count: byte;
    mass: array [1..50] of TLabel;
begin
   count:=spinedit1.Value;
   For i:=1 to count do
     Begin
        mass[i]:=TLabel.Create(Form1);
        mass[i].Left:=50;
        mass[i].Top:= 100 + i*(mass[i].Height+5);
        mass[i].Caption:= 'label'+inttostr(i);
     End;
   Form1.Refresh;
end;

Автор: dumb 14.11.2007, 20:00
Код
mass[i].Parent := Form1;

Автор: vicq 14.11.2007, 20:08
Большое спасибо! 
а где можно почитать про основы динамического создания компонентов?

Автор: ivan219 15.11.2007, 08:50
vicq
Код

procedure TForm1.Button1Click(Sender: TObject);
var i,count: byte;
    mass: array [1..50] of TLabel;
begin
   count:=spinedit1.Value;
   For i:=1 to count do
     Begin
        mass[i]:=TLabel.Create(Form1);
        mass[i].Left:=50;
        mass[i].Top:= 100 + i*(mass[i].Height+5);
        mass[i].Caption:= 'label'+inttostr(i);
     End;
   Form1.Refresh;
end;  

А как ты ими будешь управлять если  mass у тебя локальная smile 
Код

var
    mass: array [1..50] of TLabel;
.
.
procedure TForm1.Button1Click(Sender: TObject);
var i,count: byte;
begin
   count:=spinedit1.Value;
   For i:=1 to count do
     Begin
        mass[i]:=TLabel.Create(Form1);
        mass[i].Left:=50;
        mass[i].Top:= 100 + i*(mass[i].Height+5);
        mass[i].Caption:= 'label'+inttostr(i);
     End;
   Form1.Refresh;
end;

Автор: MetalFan 15.11.2007, 09:07
и ошибку словишь, если count>high(mass)

Автор: vicq 15.11.2007, 19:12
это вроде примера... для понятия динамики.
то что нужно было - это вывести заданое кол-во лейблов, не больше 15...
Спасибо всем! только хотелось бы по поводу всего этого литературку почитать, если кто знает, напишите пожалуйста.

Автор: lukas 16.11.2007, 17:35
ну во-первых посоветовал бы не использовать статистических масивов для динамически созданных объектов, на мой взгляд самый лучший вариант (для неизвестного количества объектов) это TLabel + TList


Код

Var
 LabelList:TList;
..
..
procedure TForm1.Button1Click(Sender: TObject);
var i,count: byte;
 OBJ:TLabel;
begin
IF LabelList=nil then LabelList:=TList.Create else LabelList.Clear;
   count:=spinedit1.Value;
   For i:=1 to count do
     Begin
        OBJ:=TLabel.Create(SELF);
        OBJ.Parent:=SELF;
        LabelList.Add(OBJ);
     End;
end;

// обращение происходит так...

TLabel(LabelList.Items[i])


Объекты это все равно указатели... 

Автор: Lianamir 17.11.2007, 20:07
Код

count:=spinedit1.Value;

Подскажите пжлста, spinedit1.Value -это что?

Автор: THandle 17.11.2007, 20:16
TO Lianamir.
Компонент TSpinEdit. Вкладка Samples. Value это та циферка которая в нём написана.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)