Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как создать массив label в С++ builder
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
123kill12
нужно расположить на форме(Form2) 100 label. я утрирую задачу чтоб не описывать. как создать массив label'ов. все что нашел в инете либо не работает либо выдает ошибки.
причем label нужно создавать по верх всех других элементов.

нашел наконец рабочий код.
TLabel* l=new TLabel(Form1);
l->Caption="label";
l->Parent=Form2;
l->Name="Label" + IntToStr(i);
l->Top=10;
l->Left=i*40;

но они появляются при создании и сразу уходят на задний план.
l->BringToFront(); не помогает.

с расположением поверх всех решил проблему. но удаляться не хотят(((
делаю так.
delete((TLabel*)FindComponent("Label"));
не работает((

скорее всего это связано с тем что я переприсвоил родителя для того чтоб он был по верх других.
for(int i=0; i<HH_count;i++)
{
TLabel* l=new TLabel(Form1);
l->Caption="T:="+FloatToStr(i);
l->Parent=Chart1;
l->Name="Label" + IntToStr(i);
l->Transparent=true;
l->Font->Size=10;
l->Font->Color=clGreen;
l->Top=10;
l->Left=40*i;
l->BringToFront();
}
123kill12
AnsiString S="Label"+IntToStr(i);
TComponent* Tc = Form1->FindComponent(S);
TLabel *vTl;
vTl = dynamic_cast<TLabel*>(Tc);
delete vTl;

а так сработало.
Xenia
Может быть вам лучше сделать так?

TLabel* pl[HH_count]; // заводим массив pl для хранения указателей

for(int i=0; i<HH_count;i++)
{
TLabel* l= pl[i] = new TLabel(Form1); // вместе с аллокацией запоминаем указатель в массиве pl
l->Caption="T:="+FloatToStr(i);
l->Parent=Chart1;
l->Name="Label" + IntToStr(i);
l->Transparent=true;
l->Font->Size=10;
l->Font->Color=clGreen;
l->Top=10;
l->Left=40*i;
l->BringToFront();
}

Когда не нужно, удаляем:

for(int i=0; i<HH_count;i++) delete pl[i];

P.S. Судя по тому, что родитель лайблов у вас Chart1, то ваша задача, видимо, сводится к созданию надписей на графике. Если это так, то есть и альтернативная возможность - добавить на тот же график лишнюю серию (Series), состоящую из отдельных точек. Заложить в эту серию точки с нужными вам координатами и именами, а в свойствах серии указать, чтобы имя каждой точки прописывалось на графике. Сами точки можно сделать невидимыми или под цвет фона графика, тогда будут видны только надписи.
123kill12
задача сводится к пересечению графиков. а их может быть много. одна функция при построении ищет пересечения. а по нажатию кнопки они отображаются или исчезают. так что переменная HH_count не известна. вот и приходится выделять динамический массив.
Xenia
Цитата(123kill12 @ May 29 2011, 02:32) *
задача сводится к пересечению графиков. а их может быть много. одна функция при построении ищет пересечения. а по нажатию кнопки они отображаются или исчезают. так что переменная HH_count не известна. вот и приходится выделять динамический массив.

Если HH_count не константа, а переменная с заранее неизвестным значением, то массив указателей тоже можно быть выделен динамически. Вот так:
TLabel**pl = new TLabel[HH_count];
Только тогда по окончании использования его тоже придется удалить:
delete[] pl;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.