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

Собственная функция вместо ButtonClick

16.05.2018, 22:27. Показов 1916. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++ Builder 2006. Имеется БД Access, подключенная к Builder C++ через ADOConnection, ADOTable и DataSource. Необходимо вывести базу данных на форму не используя компонент dbgrid. То есть оформить вывод так как я хочу.
Логично, что нужно динамически генерировать элементы и в них записывать значения из полей таблицы.
Часть того как я делаю:
C++
1
2
3
4
5
6
7
8
for (int i = 1; i <= ADOTable1->RecordCount; i++) {
                Btn[i] = new TButton(UserMain);
                Btn[i]->Parent = UserMain;
                Btn[i]->Left = 240 + (220 * (i - 1)) * c;
                Btn[i]->Top = k * 270;
                Btn[i]->Name = "Button" + IntToStr(i);
                Btn[i]->Caption = "Подробнее";
}
В цикле так же генерируются и прочие элементы, но меня интересует именно Button
Количество этих кнопок меняется в зависимости от БД. Как на них навесить обработчик события клика, при этом должно выводиться разное сообщение в зависимости от кнопки
Пробую сделать обычной функцией:
C++
1
2
3
4
5
void showAbout(int i) {
        ShowMessage(i);
}
//и в предыдущем цикле такое:
Btn[i]->OnClick = showAbout(i);
Но ошибка
Code
1
[C++ Error] Unit2.cpp(73): E2109 Not an allowed type
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2018, 22:27
Ответы с готовыми решениями:

Ветвление по ButtonClick не работает, как надо?
После трёхлетнего перерыва по необходимости взялся за РАД ХЕ6, конкретно Билдер. Вот, текст программы - ничего в ней и нет абсолютно, а всю...

Обратиться к элементам класса в методе ButtonClick
Здравствуйте. Есть класс class Elem{ public: int a; }; и метод void __fastcall TForm1::Button1Click(TObject *Sender) Мне...

Собственная функция RANK
Здравствуйте, помогите пожалуйста разобраться с функцией RANK. Она должна делать следующее: Числа Ранг по убыванию Ранг по возрастанию ...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
16.05.2018, 23:53
Лучший ответ Сообщение было отмечено RealPeha как решение

Решение

Обработчик должен быть методом класса, так что
C++
1
2
3
4
5
6
7
void __fastcall TForm1::MyClick(TObject* Sender)
{
    // а вот тут в зависимости от Sender-а (или, например, от static_cast<TButton*>(Sender)->Tag) и выдавать разные сообщения.
}
 
// и назначать:
Btn[i]->OnClick = MyClick;
1
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 4
17.05.2018, 09:33  [ТС]
Я так пробовал делать уже, но получаю ошибку
Code
1
[C++ Error] Unit2.cpp(87): E2316 '_fastcall TUserMain::MyClick(TObject *)' is not a member of 'TUserMain'
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
17.05.2018, 09:37
Лучший ответ Сообщение было отмечено RealPeha как решение

Решение

Ну так в классе формы (Unit1.h) надо было добавить прототип метода

C++
1
2
3
4
5
6
7
8
9
10
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    // здесь компоненты - не трогаем
 
private:
    void __fastcall MyClick(TObject* Sender); // <--- Вот это нужно сделать
public:
    __fastcall TForm1(TComponent* Owner);
};
0
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 4
17.05.2018, 16:54  [ТС]
Теперь жалуется на строку Btn[i]->OnClick = MyClick;
Code
1
[C++ Error] Unit2.cpp(71): E2451 Undefined symbol 'MyClick'
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
17.05.2018, 16:56
Ты куда добавил описание? Надо его добавить в ту же форму, где происходит то, что написано в первом посте. Я не телепат, по обрывкам кода диагноз ставить не умею.
0
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 4
17.05.2018, 18:17  [ТС]
Я нашел в чем моя проблема, но её решения я не знаю. Компоненты на форме у меня генерируются в функции, потому что дальше эту функцию нужно будет вызывать при необходимости обновить эти компоненты.
Урезал свой код для того, чтобы уменьшить количество возможных проблем.
Unit1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TButton *Btn[3];
 
void GenTable() {
        for (int i = 1; i <= 3; i++) {
                Btn[i] = new TButton(Form1);
                Btn[i]->Parent = Form1;
                Btn[i]->Left = 10 + i * 100;
                Btn[i]->Top = 10;
                Btn[i]->Name = "Button" + IntToStr(i);
                Btn[i]->Caption = "Подробнее";
                Btn[i]->OnClick = MyClick;
        }
}
 
void __fastcall TForm1::FormCreate(TObject *Sender) {
        GenTable();
}
 
void __fastcall TForm1::MyClick(TObject *Sender) {
        ShowMessage("test");
}
И в Unit1.h добавил это
C++
1
2
private:
        void __fastcall MyClick(TObject *Sender);
Ошибка
Code
1
[C++ Error] Unit1.cpp(26): E2451 Undefined symbol 'MyClick'
Проблема из-за функции GenTable, когда я переношу код из ней напрямую в FromCreate то все работает. Но функция GenTable мне нужна, чтобы при определенных событиях опять вызывать её тем самым обновлять компоненты.

Добавлено через 48 минут
Спасибо volvo, проблему решил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2018, 18:17
Помогаю со студенческими работами здесь

Собственная функция gets и puts
Как описать свою функцию gets, не могу понять, чтобы работала в моей библиотеке. Аналогично puts. У кого-нибудь есть мысли на этот счет?

Собственная функция true, false
Приветствую, возникли проблемы с выполнением кода. Сначала показывал вроде правильно, потом я начал его исправлять, и вообще не показывает...

Собственная функция возведения в степень
Сейчас изучаю функции, и наткнулся на одну проблему. #include&lt;stdio.h&gt; int main(){ int rezault=0; rezault =...

Собственная функция не правельно работает.
В принципе это мелочь, но всеравно хотелось бы знать, почему так: Функция GetDlgItemText (hwnd, IDC, buf, sizeof(buf)); работает...

Собственная функция strcat -сцепление строк
написать собственную функцию strcat -сцепление строк. Сравнить работу функции со стандартной из библиотеки string.h, если таковая...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru