реклама на сайте
подробности

 
 
> как создать массив label в С++ builder
123kill12
сообщение May 28 2011, 18:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



нужно расположить на форме(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 - May 28 2011, 18:17
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
123kill12
сообщение May 28 2011, 19:46
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



AnsiString S="Label"+IntToStr(i);
TComponent* Tc = Form1->FindComponent(S);
TLabel *vTl;
vTl = dynamic_cast<TLabel*>(Tc);
delete vTl;

а так сработало.

Сообщение отредактировал 123kill12 - May 28 2011, 19:47
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 28 2011, 20:00
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



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

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), состоящую из отдельных точек. Заложить в эту серию точки с нужными вам координатами и именами, а в свойствах серии указать, чтобы имя каждой точки прописывалось на графике. Сами точки можно сделать невидимыми или под цвет фона графика, тогда будут видны только надписи.
Go to the top of the page
 
+Quote Post
123kill12
сообщение May 28 2011, 22:32
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



задача сводится к пересечению графиков. а их может быть много. одна функция при построении ищет пересечения. а по нажатию кнопки они отображаются или исчезают. так что переменная HH_count не известна. вот и приходится выделять динамический массив.
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 28 2011, 23:06
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



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

Если HH_count не константа, а переменная с заранее неизвестным значением, то массив указателей тоже можно быть выделен динамически. Вот так:
TLabel**pl = new TLabel[HH_count];
Только тогда по окончании использования его тоже придется удалить:
delete[] pl;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01363 секунд с 7
ELECTRONIX ©2004-2016