Обработка событий динамической кнопки
newBtn->Parent = Form1;
newBtn->OnClick = myClick;
...
void __fastcall myClick (TObject *Sender) {
....
}
выдает ошибку... в чем проблема?
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) {
....
}
Создаю динамически кнопку:
newBtn->Parent = Form1;
newBtn->OnClick = myClick;
...
void __fastcall myClick (TObject *Sender) {
....
}
выдает ошибку... в чем проблема?
Обрати внимание на строчку:
TButton *newBtn = new Button (Form1);
Ты тип TButton инициализируешь типом Button.
Обрати внимание на строчку:
TButton *newBtn = new Button (Form1);
Ты тип TButton инициализируешь типом Button.
опечатка вышла...:) это я тут Button инициализирую, а проге все нормально TButton, только все равно ошибка. :)
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) {
....
}
интересный код... только не работает.. по нажатию кнопки ничего не происходит :{
"Вспомните, какой тип должен быть у обработчика события. А какой при этом тип у функции myClick? Вот здесь ответ и кроется."
интересный код... только не работает.. по нажатию кнопки ничего не происходит :{
Дык а не работает он по тому что myClick не опубликованный метод. в общем если бы myClick был бы не просто методом а методом класса Form1 и описан был бы в разделе __published то тогда все отлично было бы. Подводя итоги:
{
.....
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
{
__published: // IDE-managed Components
void __fastcall myClick(TObject * Sender);
};
Вот так должно работать, сорри если мудрю, ибо дюже давно Билдер не пускал, как то из прогера в аналитики пришлось податься.
Дык а не работает он по тому что myClick не опубликованный метод. в общем если бы myClick был бы не просто методом а методом класса Form1.
а подругому никак? хочу чтобы он не был методом класса:)
а подругому никак? хочу чтобы он не был методом класса:)
Религия запрещает?=)
А вообще я эту фишку с TMethod юзал в своем проекте для того чтоб кнопке/меню и прочим контролам лежащим на одной форме назначать обработчик являющийся паблишед методом другой формы.