С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Создать Label динамически для чайников :)

27.11.2012, 12:52. Показов 6328. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добро!
Буду краток и прямолинеен:
Покажите как правильно в процессе исполнения EXE тоесть динамически создать Label?
В поиске не нашел но если кто найдет и покажет где нашел буду признателен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2012, 12:52
Ответы с готовыми решениями:

Динамически создать Label
Привет, буду благодарен любой помощи. <?xml version="1.0" encoding="utf-8" ?> <students> <mainStudents> ...

Как динамически создать Label
Здравствуйте! Мне нужно по нажатию кнопки открыть форму в которой будут создано столько компонентов Label, сколько элементов в масиве строк...

Динамически не могу создать label
Здравствуйте, я создаю массив с label'ами и пытаюсь вывести на форму, но как-то оно не получается, помогите пожалуйста. Вот код Label...

32
14 / 14 / 4
Регистрация: 27.10.2012
Сообщений: 141
27.11.2012, 13:07
Вот так например

C++
1
2
TLabel *Label1 = new TLabel(this);
Label1->Parent=Form1;
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
27.11.2012, 13:08
А вот...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    static int sec = 0;
    if (++sec == 5) {
      TLabel *lbl1 = new TLabel(this);
      lbl1->Parent = Form1;
      lbl1->Top = 32; lbl1->Left = 24;
      lbl1->Caption = "Ìîÿ ïåðâàÿ ìåòêà";
    }
    if (sec == 7) {
      TLabel *lbl2 = new TLabel(Panel1);
      lbl2->Parent = Panel1;
      lbl2->Top = 16; lbl2->Left = 16;
      lbl2->Caption = "Ìîÿ âòîðàÿ ìåòêà";
    }  
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
27.11.2012, 13:32  [ТС]
Спасибо!
C++
1
2
3
 TLabel *lbl1 = new TLabel(ScrollBox1);
 lbl1->Parent = ScrollBox1;
 lbl1->Top = 10; lbl1->Left = 10;
Для полного счастья подскажите как ему создать событие MouseDown...
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
27.11.2012, 13:46
По идее так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Label1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
                    int X, int Y)
{
///...
}
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{ TLabel *lbl1 = new TLabel(ScrollBox1);
 lbl1->Parent = ScrollBox1;
 lbl1->Top = 10; lbl1->Left = 10;
 lbl1->onMouseDown=Label1MouseDown;
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
27.11.2012, 13:53  [ТС]
Событие надо заранее прописать в Cpp файле:
C++
1
2
3
4
5
void __fastcall TForm1::lbl1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
                    int X, int Y)
{
lbl1->Font->Style = lbl1->Font->Style << fsUnderline;
}

А потом сослаться на него так:
C++
1
lbl1->onMouseDown=lbl1MouseDown;
Я правильно понял?
Если да то будет сложно по причине большого количества создаваемых Labelov их может быть два три или 90-110 штук...
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
27.11.2012, 13:57
Правильно, и в h-файле в классе формы надо прописать
C++
1
void __fastcall lbl1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
27.11.2012, 14:04
Цитата Сообщение от Samrisbe Посмотреть сообщение
Если да то будет сложно по причине большого количества создаваемых Labelov их может быть два три или 90-110 штук...
Если манипуляции с лэйблами сходные, то сложностей быть не должно; просто в начале обработчика назначить "нарицательную" метку...
C++
1
 TLabel *common = (TLabel*)Sender ;
и с ней (common) осуществлять все действия. Если нужно, с анализом какого-нибудь свойства Sender'а, напр. Tag.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
27.11.2012, 14:42  [ТС]
Спасибо, все теперь все понятно!
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
27.11.2012, 14:49
Запрыгивая на полном ходу в остановившийся поезд, могу добавить от себя, что пригодится еще перебор всех элементов на форме:
C++
1
form->Components[i]->ClassNameIs( "TLabel" )
и метод поиска компанента:
C++
1
FindComponent
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.12.2012, 16:00  [ТС]
Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  static int sec = 0; 
  static int top = 0; 
 
    if (++sec == 1) {
      TLabel *lbl1 = new TLabel(this);
      lbl1->Parent = ScrollBox1;
      lbl1->Top = 5;
      top = lbl1->Top;
      lbl1->Left = 5;
      lbl1->OnMouseDown = lbl1MouseDown; // прописал событие везде где надо включая h
    }
 
    if (sec == 2) {
      TLabel *lbl2 = new TLabel(this);
      lbl2->Parent = ScrollBox1;
      lbl2->Top = top + 20;
      top = lbl2->Top;
      lbl2->Left = 5;
    }
}
Ошибка:
C++
1
[C++ Error] Unit1.cpp(3572): E2451 Undefined symbol 'lbl1'
Ошибку видет в этом::
C++
1
2
3
4
5
void __fastcall TForm1::lbl1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
                    int X, int Y)
{
lbl1->Font->Style = lbl1->Font->Style << fsUnderline;
}
Компонент lbl1 создаю по кнопке, я понимаю что он хочет lbl1 видить глобально, но как???
Непойму как обойти этот острый угол.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
10.12.2012, 16:42
Ну а объявить вне функций; где экземпляр формы.
C++
1
2
3
4
TForm1 *Form1;
 
TLabel *lbl1;
TLabel *lbl2;
Но только б в lbl1MouseDown надо б по хорошему передавать имя текущего лейбла. Чтобы не создавать для каждой лейблы свою, а создать одну универсальную.

Добавлено через 13 минут
Точнее
C++
1
2
3
4
TForm1 *Form1;
 
TLabel *lbl1 = new TLabel(Form1);
TLabel *lbl2 = new TLabel(Form1);
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.12.2012, 16:46  [ТС]
Скомпилировал и во время исполнения этого события:
C++
1
2
3
4
5
void __fastcall TForm1::lbl1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
lbl1->Font->Style = lbl1->Font->Style << fsUnderline;
}
Access...
Само событие работает нормально проблема в этом коде:
C++
1
lbl1->Font->Style = lbl1->Font->Style << fsUnderline;
может както по другому надо работать с текстом динамически созданного лябла?
Миниатюры
Создать Label динамически для чайников :)  
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
10.12.2012, 17:01
У меня точно такая же ошибка. Но это дело не в новосозданном объекте, а именно что-то со стилями. С подчеркиванием.

Вот такая хренотень все показывает:

C++
1
2
3
4
5
void __fastcall TForm1::lbl1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
                    int X, int Y)
{
ShowMessage(lbl1->Caption);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
TForm1 *Form1;
 
TLabel *lbl1 = new TLabel(Form1);
TLabel *lbl2 = new TLabel(Form1);
 
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  static int sec = 0;
  static int top = 0; 
 
    if (++sec == 1) {
      lbl1->Parent = ScrollBox1;
      lbl1->Top = 5;
      top = lbl1->Top;
      lbl1->Left = 5;
      lbl1->OnMouseDown = lbl1MouseDown; // прописал событие везде где надо включая h
      lbl1->Caption = "LABEL1";
 
    }
 
 
    if (sec == 2) {
      lbl2->Parent = ScrollBox1;
      lbl2->Top = top + 20;
      top = lbl2->Top;
      lbl2->Left = 5;
      lbl2->Caption = "LABEL2";
    }
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.12.2012, 17:10  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вот такая хренотень все показывает
Да я тоже так проверил, событие работает.
Залез в книгу, может там что найду...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
10.12.2012, 17:16
может стоит объявлять по другому. Я такие вещи вот так строю__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
    TLabel *lbl1 ;
    TLabel *lbl2 ;
    TLabel *metka[99];
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDblClick(TObject *Sender)
{
   lbl2 = new TLabel(this);
   lbl2->Parent = Form1;
   lbl2->Caption = "ÐÀÄÓÃÀ";
   lbl2->OnClick = lbl1Click ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lbl1Click(TObject *Sender)
{
   ((TLabel*)Sender)->Font->Style=TFontStyles()<<fsUnderline;
}
.. и работает; и на ошибки не ругается.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.12.2012, 17:42  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
может стоит объявлять по другому
Спасибо nick42, работает как надо.
А как сделать проверку font подчеркнутый в лябле или нет, чтоб подчеркнуть если нет, и наоборот убрать подчеркивание если да?
вот здесь:
C++
1
2
3
4
void __fastcall TForm1::lbl1Click(TObject *Sender)
{
   ((TLabel*)Sender)->Font->Style=TFontStyles()<<fsUnderline;
}
Добавлено через 8 минут
так сделал вроде работает:
C++
1
2
3
 if (((TLabel*)Sender)->Font->Style==TFontStyles()<<fsUnderline) {
 ((TLabel*)Sender)->Font->Style=TFontStyles()>>fsUnderline; }
 else{((TLabel*)Sender)->Font->Style=TFontStyles()<<fsUnderline;}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
10.12.2012, 18:03
Цитата Сообщение от Samrisbe Посмотреть сообщение
if (((TLabel*)Sender)->Font->Style==TFontStyles()<<fsUnderline)
я тоже так делаю.

Можно еще так, кажется__
C++
1
->Font->Style.Contains(fsUnderline)
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.12.2012, 18:25  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
TLabel *lbl1 ;
* * TLabel *lbl2 ;
* * TLabel *metka[99];
А это TLabel *metka[99]; для чего?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
10.12.2012, 18:45
Цитата Сообщение от Samrisbe Посмотреть сообщение
А это TLabel *metka[99]; для чего?
да просто если лэйблов много предполагается, или они "в компании" индексированных компонентов...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2012, 18:45
Помогаю со студенческими работами здесь

Не могу создать динамически label
Впрочем создать то я могу, только не могу создать label в указанном месте, т.е в определенных координатах х и y

Как создать VPN соединение для чайников
Здравствуйте! Как можно создать VPN соединение? Чтобы один компьютер мог подключится к другому через интернет. К примеру я видел...

C# для чайников (совсем чайников)
Доброго времени суток! Хочу попробовать себя в области програмирования. Трудность заключается в том, что очень мало информации для...

Как динамически создать массив из динамически конструируемых экземпляров класса?
Есть два класса.Подразумевается ,что первый в конструкторе выделяет интовый массив длинной n,второй выделяет массив экземпляров первого...

Динамически создать layout для адаптера
Может кто подскажет, как динамически создать layout для адаптера? Задача заполнять таблицу данными из БД. Думаю удобно было-бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru