Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12

События динамически созданных объектов

25.08.2009, 13:24. Показов 3496. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет

Вопрос в том, как сделать отдельные события для каждой динамически созданной кнопки ?
Пока получилось только для всех одно.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
   TButton *btn;    TPageControl *pc;   TTabSheet *ts;
//---------------------------------------------------------------------------
 
void __fastcall TForm10::FormActivate(TObject *Sender)
{
  int type,y;
  pc = new TPageControl(this);
  pc->Parent = this;
 
  Form3->Table2->First();
while (!Form3->Table2->Eof)
 { y=0;
          ts = new   TTabSheet(this);           //Динимически создаем вкладки типов
          ts->Caption = Form3->Table2->Fields->FieldByName("TypeName")->AsString;
          type = Form3->Table2->Fields->FieldByName("TovType")->AsInteger;
          ts->PageControl = pc;
          pc->TabHeight = 40;                  // -------------------------------
          pc->Font->Size=10;
          pc->Width=1500;
          pc->Height=600;
Form3->Table1->First();
while (!Form3->Table1->Eof)
 {
        if (Form3->Table1->Fields->FieldByName("TovType")->AsInteger == type)
        {
          btn = new TButton(this);
          btn->Width = 350;
          btn->Height = 40;
          btn->Parent = ts;
         btn->Left=0;
         btn->Top=(y*41);
         y++;
         btn->OnClick=tm;
        }
   Form3->Table1->Next();
 }
 
   Form3->Table2->Next();
 }
}
 
 
//---------------------------------------------------------------------------
 
 void __fastcall TForm10::tm(TObject *Sender)
{
  ShowMessage("tyojklj");
}
Кнопочки замечательно делаются, но для в том что для каждой кнопки необходимо свое событие.

Пробовал WndProc(TMessage &Msg) - по моему должен ловить всё происходящее на форме, но понятия не имею как им пользоваться, и можно ли применить для моего случая.

Помогите пожалуйста начинающему.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.08.2009, 13:24
Ответы с готовыми решениями:

События динамически созданных объектов
Доброго всем времени суток! Суть вопроса такова: я динамически в пользовательском классе создаю объект класса TTimer. Мне необходимо...

События динамически созданных компонентов...
Как создать обработчик события для динамически созданного визуального компонента? TForm *mF; mF = new TForm(Form1); ...

События динамически созданных компонентов
В проекте динамически создаются компоненты TShape нажатием мыши на форме. Для компоненты необходимо обработать событие OnMouseDown,в...

16
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.08.2009, 13:36
посмотрите, как выглядит заголовок нужного вам стандартного события, напишите свои функции и просто присваивайте нужную функцию нужному обработчику:
btn->OnClick = MyClick...
а плодить функции необязательно, т.к. с помощью Sender вы по имени можете узнать, какую кнопку нажимали, если, конечно же, будет осмысленно давать им названия...
0
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
25.08.2009, 15:30  [ТС]
Я не могу назвать кнопку как мне нада, несколько называются а какой то ошибка: "Такое то имя "@" не может быть именем компоненты, но поидее имеда должны состоять из ID + btn.
C++
1
2
3
         ID = Form3->Table1->Fields->FieldByName("TovID")->AsInteger ;
         btn->Caption =Form3->Table1->Fields->FieldByName("TovNazv")->AsString ;
         btn->Name = ("bnt" + StrToInt(ID));
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.08.2009, 15:34
а зачем вам "@" в названии кнопки-то? используйте подчеркивание на худой конец - это так глобально?
0
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
25.08.2009, 15:45  [ТС]
http://albums.foto.tut.by/user... 907126.jpg

Добавлено через 2 минуты
из картинки видно что "btn" + ID которое = 8, должно получится "btn8" а получилось "klj"
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.08.2009, 15:45
так в чем проблема-то? что-то иллюстрация ничего вразумительного не показывает
0
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
25.08.2009, 15:47  [ТС]
проделал пошагово до ошибки и обнаружил что когда ID = 15 btn->name: {@}
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.08.2009, 15:48
ну вообще тебе надо IntToStr(ID), хотя это не объясняет такого странного поведения кода
0
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
25.08.2009, 15:57  [ТС]
даже если присваивать каждой вновь создаваемой кнопке имя, то еще нужно что бы при нажатии на эти выполнялось все событие, вернее не свое а передавались параметры, мы нажимаем на кнопку имя которой знаем, извлекаем из нее это ID и все хорошо

это мои скромные планы

Добавлено через 4 минуты
перепутал
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.08.2009, 16:01
Цитата Сообщение от seclerik Посмотреть сообщение
даже если присваивать каждой вновь создаваемой кнопке имя, то еще нужно что бы при нажатии на эти выполнялось все событие, вернее не свое а передавались параметры, мы нажимаем на кнопку имя которой знаем, извлекаем из нее это ID и все хорошо
ну так для этого и делается событие OnClick и осмысленное название кнопок, чтобы из навания нужную инфу вытянуть... но у вас же проблема именно в том, что название формируется загадочное какое-то...
0
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
25.08.2009, 16:04  [ТС]
все работает, присвоили имена динамически созданным кнопкам, дальше нужно придуть обработчик для каждой кнопки.
В cpp файле по нажатию книпки вызываем метод tm
C++
1
btn->OnClick=tm;
C++
1
2
3
4
void __fastcall TForm10::tm(TObject *Sender)
{
  ShowMessage(btn->Name);
}
я думал у каждой кнопки есть имя а ShowMessage показывает имя последней сознанной, так как обратится к имени нажатой ?

Добавлено через 1 минуту
Цитата Сообщение от VoodooMan Посмотреть сообщение
ну так для этого и делается событие OnClick и осмысленное название кнопок, чтобы из навания нужную инфу вытянуть... но у вас же проблема именно в том, что название формируется загадочное какое-то...
уже нет, все было из-за StrToInt
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.08.2009, 16:09
ну я же говорил, что нужно использовать sender:
((TButton*) Sender)->Name
1
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
25.08.2009, 16:17  [ТС]
Цитата Сообщение от VoodooMan Посмотреть сообщение
ну я же говорил, что нужно использовать sender:
((TButton*) Sender)->Name
Спасибо огромное добры человек
0
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
26.08.2009, 12:03  [ТС]
дело такое, есть метод
C++
1
2
3
4
5
 void __fastcall TForm10::tm(TObject *Sender)
{    
Form11->Show();
// куча расчетов, часть данный берется из этой самой Form11
....
появляется форма и проводятся расчеты, все бы хорошо но надо сначала тыкнуть на OK Form11 а потом дальше проводить расчеты

может как то можно
C++
1
2
3
4
 void __fastcall TForm10::tm(TObject *Sender)
{    
Form11->Show(); 
здесь приостановить работу программы, а далее после нажатия кнопки на форме11 продолжать выполнение метода
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.08.2009, 12:38
Form11->ShowModal();
1
0 / 0 / 0
Регистрация: 25.08.2009
Сообщений: 12
26.08.2009, 12:46  [ТС]
все так просто а я уже пол интернета перерыл
спасибки
0
125 / 116 / 17
Регистрация: 27.02.2007
Сообщений: 291
30.08.2009, 17:37
Цитата Сообщение от seclerik Посмотреть сообщение
даже если присваивать каждой вновь создаваемой кнопке имя, то еще нужно что бы при нажатии на эти выполнялось все событие, вернее не свое а передавались параметры, мы нажимаем на кнопку имя которой знаем, извлекаем из нее это ID и все хорошо
Да пусть при динамическом создании кнопке присваивается какое угодно имя (может не быть ни какого). Главное - это правильное ID. А раз так присваиваем ID Tag’у кнопки и всё! А в обработчике:
C++
1
2
3
4
void __fastcall TForm10::tm(TObject *Sender)
{
    ShowMessage("ID="+IntToStr(((TButton*)Sender)->Tag));
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2009, 17:37
Помогаю со студенческими работами здесь

События для динамически созданных кнопок
Доброе время суток! Я создал свой класс objekt (); //конструктор save_objekt(TOpenDialog *open_kart); ...

Удаление динамически созданных объектов
Приветствую. Вопрос поднимался, но что то не получается! Создаю объекты в цикле PanMap = new TPanel(Panel1); PanMap->Tag = TagMap;...

Удаление динамически созданных объектов
Помогите плз. Пишу курсач по МИО. Вот ща работаю над интерфейсом. Я по нажатию кнопку создаю динамически объект edit. Хочу теперь при...

Обработка событий динамически созданных объектов в С++ Builder
Добрый день! Подскажите, пожалуйста, возможное решение следующей проблемы... Есть некая форма. На форме присутствует элемент...

Сохранение данных из динамически созданных объектов в PageControl
Всем привет. Суть проблемы на форме разместил компонент PageControl , в нём динамически создаю вкладки и Edit. Далее например хочу в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru