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


Автор: Данкинг 16.7.2007, 22:16
Пытаюсь динамически создать TLabel на панели Panel1, но она почему-то не появляется. Что не так??


Код

labels:array[1..10000] of tlabel;

labels[1]:=tlabel.Create(panel1);
labels[1].Left:=100;
labels[1].Top:=200;
labels[1].Caption:='aaa';
labels[1].Color:=clWhite;
labels[1].Visible:=true;
labels[1].Show;

Автор: ALeXandrK 16.7.2007, 22:28
Установи Label.Parent := Компонент, на котором создаешь.
Возможно поможет smile 

Проверил! Точно поможет. 
А строчки
Код

labels[1].Visible:=true;
labels[1].Show;

Можешь убрать - лишние они.

Автор: Данкинг 16.7.2007, 22:31
Да, помогло, спасибо:

Код

labels[1].Parent:=panel1;

 smile 

Автор: ALeXandrK 16.7.2007, 22:34
Рад помочь smile 
Тем более, что сам сегодня решил такую
же проблему.
Я думал, что конструкор сам это делает,
ан нет smile 

Автор: Данкинг 16.7.2007, 22:50
Да, visible по умолчанию присваивается, всё правильно, без него тоже нормально работает. А шрифт вот так:

Код

labels[1].Font.Style:=[fsbold];


Просто я с динамическими компонентами ни разу ещё не работал.

Автор: ALeXandrK 16.7.2007, 23:13
Так стили не присваиваются!
Стиль - это множество!
Нужно сначала проверить есть ли в этом множестве то, что
тебе нужно, и потом добавить это, если там его нету.

От слов к делу:

Код

if not([fsbold] in labels[1].Font.Style)
then labels[1].Font.Style:=labels[1].Font.Style+[fsbold];

Автор: lukas 17.7.2007, 07:02
ALeXandrK,

можно присваивать как хочешь и даже так:

 labels[1].Font.Style:=[];

Добавлено через 1 минуту и 55 секунд
кстати, тебе не обязательно хранить лейблы в массиве, ведь это занимаемая память, такой массив уже существует заранее

form.components[n]

ну или если хочешь сделать массив, то лучше используй TObjectList, он гораздо лучше подходит для этих целей

Автор: ALeXandrK 17.7.2007, 17:14
Цитата

можно присваивать как хочешь и даже так:

 labels[1].Font.Style:=[];


Раньше не получалось, ... ну это у меня, может что-то криво писал.
Будем знать, спасибо за поправку smile 

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