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

Обработка событий

28.11.2013, 15:12. Показов 3379. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста,как сделать какое -нибудь действие например ShowMessage для OnClick динамически создаваемых кнопок
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cspin"
#pragma resource "*.dfm"
TForm1 *Form1;
TButton *new_btn;
TButton *array_btn[500];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
int s;
int a;
int d;
int j;
int k;
 
j=80;
k=5;
int max = 5;
int min = 1;
 
 
if((Edit1->Text).Length()==0){
ShowMessage ("Введите значение по горизонтали");
Form1->Edit1->SetFocus();}
if((Edit2->Text).Length()==0){
ShowMessage ("Введите значение по Вертикали");
Form1->Edit2->SetFocus();}
s=StrToInt(Edit1->Text);
a=StrToInt(Edit2->Text);
d=a*s;
if ((((Edit1->Text).Length())!=0)&&(((Edit2->Text).Length())!=0)) {
 
Form1->Visible=false;
Form2->Visible=true; }
for(int i = 1; i <= d; i++)
{ k=k+30;
int r = rand()%(max - min + 1) + min;
array_btn[i] = new TButton (Form1);
array_btn[i]->Parent = Form2;
array_btn[i]->Top = k ;
array_btn[i]->Left = j;
array_btn[i]->Caption = IntToStr(r) ;
if (i%a==0){
j=j+80;
k=5;}
}
 
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.11.2013, 15:12
Ответы с готовыми решениями:

Неверная обработка событий
Неверно обрабатываются события CheckListBox. При постановки галочки выводится сообщение удалено, за место добавлено. Т.е. происходит...

Обработка событий кнопки
доброго времени суток сделал такой код для кнопки: void __fastcall TForm1::Button1Click(TObject *Sender) { float m, n; float...

Обработка событий кнопок Button
Доброго времени суток!!! Во время создания формы создаются 10 кнопок таки образом: for(int i = 1; i &lt;= 11; i++) { TButton *a...

38
10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70
29.11.2013, 19:48  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nick42 Посмотреть сообщение
Если вы назначаете свою функцию типовому обработчику ButtonClick, то уже не правильно, - у того в параметрах присутствует TObject *Sender, то-есть передается указатель на кнопку, которую нажали. А в вашей функции - пусто. Непорядок. Добавьте в вашу функцию (и в .срр и в .h) такую же запись: вместо myFunc() - myFunc(TObject *Sender).
исправил:
в h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class TForm1 : public TForm
{
__published:    // IDE-managed Components
 
    //...
 
    void __fastcall  myFunc(TObject *Sender);
    void __fastcall TForm1:: myFunc(TObject *Sender)//   --------------  поставь обьявление сюда
 
 
private:    // User declarations
public:     // User declarations
//...........
};
в ccp:
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
void __fastcall TForm1::myFunc(TObject *Sender)
   {  ShowMessage("Hello");}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
  int s;
  int a;
  int d;
  int j;
  int k;
 
  j=80;
  k=5;
   int max = 5;
   int min = 1;
 
 
  if((Edit1->Text).Length()==0){
  ShowMessage ("Введите значение по горизонтали");
  Form1->Edit1->SetFocus();}
  if((Edit2->Text).Length()==0){
  ShowMessage ("Введите значение по Вертикали");
  Form1->Edit2->SetFocus();}
  s=StrToInt(Edit1->Text);
  a=StrToInt(Edit2->Text);
  d=a*s;
  if ((((Edit1->Text).Length())!=0)&&(((Edit2->Text).Length())!=0))  {
 
  Form1->Visible=false;
  Form2->Visible=true;                }
  for(int i = 1; i <= d; i++)
    {  k=k+30;
         int r = rand()%(max - min + 1) + min;
        array_btn[i] = new TButton (Form1);
        array_btn[i]->Parent = Form2;
        array_btn[i]->Top = k ;
        array_btn[i]->Left = j;
        array_btn[i]->Caption = IntToStr(r) ;
        if (i%a==0){
        j=j+80;
        k=5;}
        array_btn[i]->OnClick =  myFunc(TObject *Sender);
                }
 
}
ошибки:
[C++ Error] Unit1.cpp(24): E2316 '_fastcall TForm1::myFunc(TObject *)' is not a member of 'TForm1'
на 1 строчку
[C++ Error] Unit1.cpp(64): E2268 Call to undefined function 'myFunc'
[C++ Error] Unit1.cpp(64): E2108 Improper use of typedef 'TObject'
на 37
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,882
Записей в блоге: 12
29.11.2013, 20:50
Header:

C++
1
2
3
4
5
6
7
8
9
10
11
class TForm1 : public TForm
{
__published:    // IDE-managed Components
 
    //...
 
private:    // User declarations
public:     // User declarations
    // Никогда не лезь в раздел published. Там правит сам Билдер, и никто больше...
    void __fastcall  myFunc(TObject *Sender); // У тебя уже есть объявление myFunc, не надо его дублировать !!!
};
CPP
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
void __fastcall TForm1::myFunc(TObject *Sender)
   {  ShowMessage("Hello");}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
  int s;
  int a;
  int d;
  int j;
  int k;
 
  j=80;
  k=5;
   int max = 5;
   int min = 1;
 
 
  if((Edit1->Text).Length()==0){
  ShowMessage ("Введите значение по горизонтали");
  Form1->Edit1->SetFocus();}
  if((Edit2->Text).Length()==0){
  ShowMessage ("Введите значение по Вертикали");
  Form1->Edit2->SetFocus();}
  s=StrToInt(Edit1->Text);
  a=StrToInt(Edit2->Text);
  d=a*s;
  if ((((Edit1->Text).Length())!=0)&&(((Edit2->Text).Length())!=0))  {
 
  Form1->Visible=false;
  Form2->Visible=true;                }
  for(int i = 1; i <= d; i++)
    {  k=k+30;
         int r = rand()%(max - min + 1) + min;
        array_btn[i] = new TButton (Form1);
        array_btn[i]->Parent = Form2;
        array_btn[i]->Top = k ;
        array_btn[i]->Left = j;
        array_btn[i]->Caption = IntToStr(r) ;
        if (i%a==0){
        j=j+80;
        k=5;}
        array_btn[i]->OnClick =  myFunc; // <--- Тебе не надо вызывать функцию, надо запомнить указатель на нее !!!
                }
 
}
Всё, ошибки должны исчезнуть... Если нет - присоединяй проект полностью, посмотрим, чего ты там куда понадобавлял...
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
30.11.2013, 05:33
nick42, по невнимательности я тоже упустил это из вида
0
10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70
30.11.2013, 13:02  [ТС]
ЗАДАЧКА.rar
ошибки не исчезли
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,882
Записей в блоге: 12
30.11.2013, 13:22
1vlad, издеваешься, что-ли? Я тебе в предыдущем посте что написал в 10 строке для Header-а? Почему ты это убрал? Добавь, и все ошибки исчезнут...
1
10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70
30.11.2013, 16:54  [ТС]
спасибо огромное всем и прошу прощения,чувствую себя полным тупицей,который как будто не открывал ничего

Добавлено через 2 часа 42 минуты
Прошу прощения за наглость,еще вопрос появился.Как сделать,что бы по нажатие данная кнопка блокировалась?
в функции пищу array_btn[i]->Enabled= False ,выдает ошибку.
0
30.11.2013, 19:39
 Комментарий модератора 
1vlad, Вам модераторы на протяжении всей темы правят теги. Пора бы самому начать этим заниматься. В следующий раз будет карта

Предупреждение.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
02.12.2013, 09:16
Цитата Сообщение от 1vlad Посмотреть сообщение
array_btn[i]->Enabled= False ,выдает ошибку
Какую?

Не по теме:

Пойду ка телепатию практиковать...

0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
02.12.2013, 09:23
C++
1
array_btn[i]->Enabled= false;
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
02.12.2013, 09:37
_Dimon_, откуда?! Вы знаете, что у него дальше по коду нет точки с запятой? Телепатия?!
Я тоже заметил... но решил, что это частичное копирование. Ибо как можно не понять
[C++ Error] Unit1.cpp(169): E2379 Statement missing ;
?
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
02.12.2013, 09:52
Цитата Сообщение от Kulgar Посмотреть сообщение
Ибо как можно не понять
[C++ Error] Unit1.cpp(169): E2379 Statement missing ;
Судя по даной теме там все может быть. Другому человеку в голову ж не залезешь....

Добавлено через 2 минуты
1vlad, тебе б книжечку хорошую почитать ...
0
10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70
02.12.2013, 12:17  [ТС]
Цитата Сообщение от _Dimon_ Посмотреть сообщение
1vlad, тебе б книжечку хорошую почитать ...
не спорю,пока про сендер не начал читать не разобрался...А про точку с запятой,там она была...
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
02.12.2013, 14:10
1vlad, Вы и дальше нам предлагаете угадывать что у Вас за ошибка? Или всё же приведёте ответ компилятора?
0
10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70
02.12.2013, 14:42  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
1vlad, Вы и дальше нам предлагаете угадывать что у Вас за ошибка? Или всё же приведёте ответ компилятора?
Прошу прощения,я же написал,что во всем разобрался и поставленную задачу решил.Еще раз прошу прощения за кривые мои сообщения.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
02.12.2013, 14:44
Цитата Сообщение от 1vlad Посмотреть сообщение
во всем разобрался и поставленную задачу решил
В чём заключалась неисправность? Как решили?
Делитесь своими ответами.
1
10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70
02.12.2013, 18:47  [ТС]
в функции писал:
C++
1
2
3
4
5
6
void __fastcall TForm1::Block(TObject *Sender)
{
array_btn[i]=(TButton*)Sender;
((TButton*)Sender)->Enabled = false ; //блокируем себя
int idx=array_btn[i]->Tag;
 array_btn[idx-1]->Enabled=false;}
и далее оперировал с индексов кнопки с помощью переменной idx
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
06.12.2013, 14:40
- 1vlad, немного пересмотрел и переделал Ваш проект. Правда далеко не все понял. Зачем нужны две Формы?
Зачем нужны случайные числа? Но работать теперь будет значительно надежней. Вместо двух, практически
одинаковых обработчиков Едитов, сделал один и подключил сразу к двум Едитам. Посмотрите и разберитесь как это
работает. Ввел защиту на недопустимые значения Едитов (0 и значения, большие максимально допустимых). Теперь
до тех пор, пока не будут введены допустимые значения в оба Едита, нажать кнопку "Создать" будет невозможно!
Код, конечно, можно оптимизировать и унифицировать и дальше, но это будет убавлять его прозрачность и простоту
понимания, поэтому делать этого не стал ... Я, конечно, не говорю, что делать надо именно так, тем более, что не до
конца понимаю Вашу задумку! Это просто один из вариантов решения. А Вы можете сочинять что-то отталкиваясь от
этого ...
Вложения
Тип файла: rar Переделка_Staut.rar (34.9 Кб, 3 просмотров)
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
06.12.2013, 14:42
- Вдогонку! Если что не понятно - спрашивайте ...
0
10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70
07.12.2013, 18:00  [ТС]
спасибо,ваша версия оптимальней,тут не поспорить...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2013, 18:00
Помогаю со студенческими работами здесь

Обработка событий элементами формы
Среда - Borland C++. Элемент формы Button имеет обработчик события на Clic где код работы с WINAPI - записать в поток потом читать из...

Обработка сообщений/событий. Отслеживание в оборудовании
Мне необходимо отслеживать изменения в составе оборудования. Весь день лажу по инету - ищу, читаю - и везде нет ничего внятного. Подскажите...

Обработка событий динамически созданных компонентов
По нажатию на кнопку я создаю новый компонент на форме. panel.push_back(NULL); panel = new TPanel(Form1); ...

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

Обработка событий "mouse move" и "mouse down"
При добавлении в программу обработки события перемещения мыши, код обработки события нажатия мыши не вызывается. Подскажите пожалуйста, как...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru