Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка событий динамической кнопки

323
10 августа 2004 года
Sergun
228 / / 20.09.2000
Создаю динамически кнопку:
 
Код:
TButton *newBtn = new Button (Form1);
newBtn->Parent = Form1;
newBtn->OnClick = myClick;

...

void __fastcall myClick (TObject *Sender) {
....
}


выдает ошибку... в чем проблема?
310
10 августа 2004 года
fellow
853 / / 17.03.2003
Вспомните, какой тип должен быть у обработчика события. А какой при этом тип у функции myClick? Вот здесь ответ и кроется.
358
11 августа 2004 года
moonmike
423 / / 18.10.2002
Код:
TButton *newBtn = new Button (Form1);
newBtn->Parent = Form1;
[color=red]
void *AddrProc = this->MethodAddress("myClick");
TMethod Method;
Method.Data = this;
Method.Code = AddrProc;
newBtn->OnClick =  *(TNotifyEvent*)&Method;
[/color]


...

void __fastcall myClick (TObject *Sender) {
....
}
2.9K
11 августа 2004 года
Antisly
58 / / 22.04.2004
Цитата:
Originally posted by Sergun
Создаю динамически кнопку:
 
Код:
TButton *newBtn = new Button (Form1);
newBtn->Parent = Form1;
newBtn->OnClick = myClick;

...

void __fastcall myClick (TObject *Sender) {
....
}


выдает ошибку... в чем проблема?



Обрати внимание на строчку:
TButton *newBtn = new Button (Form1);
Ты тип TButton инициализируешь типом Button.

323
12 августа 2004 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Antisly


Обрати внимание на строчку:
TButton *newBtn = new Button (Form1);
Ты тип TButton инициализируешь типом Button.



опечатка вышла...:) это я тут Button инициализирую, а проге все нормально TButton, только все равно ошибка. :)

323
12 августа 2004 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by moonmike
Код:
TButton *newBtn = new Button (Form1);
newBtn->Parent = Form1;
[color=red]
void *AddrProc = this->MethodAddress("myClick");
TMethod Method;
Method.Data = this;
Method.Code = AddrProc;
newBtn->OnClick =  *(TNotifyEvent*)&Method;
[/color]


...

void __fastcall myClick (TObject *Sender) {
....
}



интересный код... только не работает.. по нажатию кнопки ничего не происходит :{

310
12 августа 2004 года
fellow
853 / / 17.03.2003
Ну что же, от повторения, как говорится, истина не тускнеет:
"Вспомните, какой тип должен быть у обработчика события. А какой при этом тип у функции myClick? Вот здесь ответ и кроется."
358
12 августа 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Sergun


интересный код... только не работает.. по нажатию кнопки ничего не происходит :{


Дык а не работает он по тому что myClick не опубликованный метод. в общем если бы myClick был бы не просто методом а методом класса Form1 и описан был бы в разделе __published то тогда все отлично было бы. Подводя итоги:

Код:
void __fastcall Form1::SomEvents(TObject * Sender)
{
.....
TButton *newBtn = new TButton (Form1);
newBtn->Parent = Form1;

void *AddrProc = this->MethodAddress("myClick");
TMethod Method;
Method.Data = this;
Method.Code = AddrProc;
newBtn->OnClick =  *(TNotifyEvent*)&Method;
...
}

void __fastcall Form1::myClick (TObject *Sender) {
....
}


при этом в *.h
 
Код:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    void __fastcall myClick(TObject * Sender);
};


Вот так должно работать, сорри если мудрю, ибо дюже давно Билдер не пускал, как то из прогера в аналитики пришлось податься.
323
12 августа 2004 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by moonmike

Дык а не работает он по тому что myClick не опубликованный метод. в общем если бы myClick был бы не просто методом а методом класса Form1.



а подругому никак? хочу чтобы он не был методом класса:)

323
12 августа 2004 года
Sergun
228 / / 20.09.2000
а так впринципе работает...
358
13 августа 2004 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Sergun


а подругому никак? хочу чтобы он не был методом класса:)


Религия запрещает?=)
А вообще я эту фишку с TMethod юзал в своем проекте для того чтоб кнопке/меню и прочим контролам лежащим на одной форме назначать обработчик являющийся паблишед методом другой формы.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог