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

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

28.11.2013, 15:12. Показов 3453. Ответов 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
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 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
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru