10 / 1 / 0
Регистрация: 13.08.2013
Сообщений: 70

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

28.11.2013, 15:12. Показов 3555. Ответов 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
33440 / 21542 / 8245
Регистрация: 22.10.2011
Сообщений: 36,973
Записей в блоге: 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
33440 / 21542 / 8245
Регистрация: 22.10.2011
Сообщений: 36,973
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове. Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru