Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Dusuney
1 / 1 / 2
Регистрация: 13.11.2012
Сообщений: 27
1

События динамически созданных компонентов

22.12.2012, 23:26. Просмотров 1192. Ответов 2
Метки нет (Все метки)

В проекте динамически создаются компоненты TShape нажатием мыши на форме. Для компоненты необходимо обработать событие OnMouseDown,в результате чего она примет зеленый цвет.
События динамически созданных компонентов... на форуме нашел объяснение похожей ситуации, но у меня выдает ошибку при присвоении компоненте события:
E2034 Cannot convert 'void(_fastcall*(_closure)(TObject*))(TOobject*)'to'void(_fastcall*(_closure)(TObject*,TMouseButton,TShiftState,int,int) )(TObject*,TMouseButton,TShiftState,int,int)'
В хелпе короче: E2034 Cannot convert 'type1' to 'type2';
Т.е. не удается преобразовать один тип к другому, как я понял.
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
//заголовочный файл
using namespace std;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
 
private:    // User declarations
         void __fastcall Shape2OnMouseDown(TObject *Sender );
 
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
 
 
 
 
// в *.cpp модуле формы:
void __fastcall TForm1::Button1Click(TObject *Sender)
{    TShape* Shape2;
     Canvas->MoveTo(60,60);
     Shape2=new TShape(this);
     Shape2->Parent=this;
     Shape2->OnMouseDown = Shape2OnMouseDown; //не удается присвоить событие
}
 
void __fastcall TForm1::Shape2OnMouseDown(TObject *Sender )  // наше событие
{   TShape *Shape2 = dynamic_cast<TShape*>(Sender);
     if (!Shape2) return;
     Shape2->Brush->Color= clGreen;
}
Не понимаю, как решить данную ситуацию с присвоением. Надеюсь на помощь. Спасибо.

Добавлено через 27 минут
Сам разобрался
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 23:26
Ответы с готовыми решениями:

События динамически созданных компонентов...
Как создать обработчик события для динамически созданного визуального компонента? TForm *mF; mF =...

Удаление динамически-созданных компонентов
Использую класс, компонентами которого кроме всего прочего, являются StaticText и Edit, графическое...

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

События динамически созданных объектов
Доброго всем времени суток! Суть вопроса такова: я динамически в пользовательском классе создаю...

События динамически созданных объектов
Всем привет :) Вопрос в том, как сделать отдельные события для каждой динамически созданной...

2
ForEveR
В астрале
Эксперт С++
8007 / 4764 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
24.12.2012, 10:39 2
4.11 Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ.
1
Dusuney
1 / 1 / 2
Регистрация: 13.11.2012
Сообщений: 27
24.12.2012, 10:56  [ТС] 3
Цитата Сообщение от Dusuney Посмотреть сообщение
В проекте динамически создаются компоненты TShape нажатием мыши на форме. Для компоненты необходимо обработать событие OnMouseDown,в результате чего она примет зеленый цвет.
События динамически созданных компонентов... на форуме нашел объяснение похожей ситуации, но у меня выдает ошибку при присвоении компоненте события:В хелпе короче: E2034 Cannot convert 'type1' to 'type2';
Т.е. не удается преобразовать один тип к другому, как я понял.
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
//заголовочный файл
using namespace std;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
 
private:    // User declarations
         void __fastcall Shape2OnMouseDown(TObject *Sender );
 
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
 
 
 
 
// в *.cpp модуле формы:
void __fastcall TForm1::Button1Click(TObject *Sender)
{    TShape* Shape2;
     Canvas->MoveTo(60,60);
     Shape2=new TShape(this);
     Shape2->Parent=this;
     Shape2->OnMouseDown = Shape2OnMouseDown; //не удается присвоить событие
}
 
void __fastcall TForm1::Shape2OnMouseDown(TObject *Sender )  // наше событие
{   TShape *Shape2 = dynamic_cast<TShape*>(Sender);
     if (!Shape2) return;
     Shape2->Brush->Color= clGreen;
}
Не понимаю, как решить данную ситуацию с присвоением. Надеюсь на помощь. Спасибо.

Добавлено через 27 минут
Сам разобрался
А и всего то надо было исправить событие Shape2OnMouseDown:
C++
1
2
3
4
void __fastcall TForm1::Shape2OnMouseDown(TObject *Sender,TMouseButton Button,
      TShiftState Shift, int X, int Y ){
//...
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2012, 10:56

Работа с большим количеством динамически созданных компонентов.
На форме динамически создается GroupBox, а на нём множество других компонентов (GroupBox выбран...

События для динамически созданных кнопок
Доброе время суток! Я создал свой класс objekt (); //конструктор...

Вызов функции для динамически созданных компонентов через PopupMenu
На форме присутствует несколько компонентов, при нажатии на правую кнопку мыши вызывает PopupMenu....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru