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

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

28.11.2013, 15:12. Показов 3560. Ответов 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
33441 / 21543 / 8245
Регистрация: 22.10.2011
Сообщений: 36,979
Записей в блоге: 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
1409 / 573 / 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
33441 / 21543 / 8245
Регистрация: 22.10.2011
Сообщений: 36,979
Записей в блоге: 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
1409 / 573 / 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
1409 / 573 / 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
Сообщений: 596
06.12.2013, 14:40
- 1vlad, немного пересмотрел и переделал Ваш проект. Правда далеко не все понял. Зачем нужны две Формы?
Зачем нужны случайные числа? Но работать теперь будет значительно надежней. Вместо двух, практически
одинаковых обработчиков Едитов, сделал один и подключил сразу к двум Едитам. Посмотрите и разберитесь как это
работает. Ввел защиту на недопустимые значения Едитов (0 и значения, большие максимально допустимых). Теперь
до тех пор, пока не будут введены допустимые значения в оба Едита, нажать кнопку "Создать" будет невозможно!
Код, конечно, можно оптимизировать и унифицировать и дальше, но это будет убавлять его прозрачность и простоту
понимания, поэтому делать этого не стал ... Я, конечно, не говорю, что делать надо именно так, тем более, что не до
конца понимаю Вашу задумку! Это просто один из вариантов решения. А Вы можете сочинять что-то отталкиваясь от
этого ...
Вложения
Тип файла: rar Переделка_Staut.rar (34.9 Кб, 3 просмотров)
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
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
Ответ Создать тему
Новые блоги и статьи
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru