Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Динамическое событие


Автор: Поручик 29.7.2005, 21:46
Всем привет!!!! Имеется следующий вопрос -
class test
{
protected:
TButton *Btn;
public:
test();
void OnClick(TObject *Sender)
};
Вопрос: Как назначить указателю Btn событие OnClick?

Автор: Vyacheslav 1.8.2005, 11:44
Код

class test
{
protected:
  TButton *Btn;
public:
  test();
void __fastcall OnClick(TObject *Sender)
};


test::test() 
{
   Btn->OnClick = OnClick;
}


Автор: Поручик 9.8.2005, 17:04
Это-то понятно, Вячеслав, но ты не выделил кнопке память, а если создать вторую кнопку и назначить по нажатию первой её исчезновение

class test
{
public:
TPanel *P;
TButton *Btn1;
TButton *Btn2;
protected:
test(TPanel *);
void initial(void);
void initbtn(TButton *);
void __fastcall OnClick(TObject *Sender);
};

test::test(TPanel *P)
{
this->P=P;
}

void test::initial()
{
initbtn(Btn1);
initbtn(Btn2);
Btn1->OnClick=OnClick;
}

void test::initbtn(TButton *B)
{
B=new TButton(P);
B->Parent=P;
}

void __fastcall test::OnClick(TObject *Sender)
{
Btn2->Visible=false;
}
Функция initial() вызывается к примеру в конструкторе формы после создания объекта класса.
Form1::Form1()
{
test T(Panel1);
T->initial();
}

Если всё делать так, то происходит ошибка smile , а если память выделять непосредственно в функции initial(), то её не происходит. Но ведь в программе может быть много кнопок и чтобы сэкономить место память лучше выделять в функции initbtn(). Аналогично и с другими элементами...
Помоги разобраться.

Автор: Mal Hack 9.8.2005, 17:09
как бы в продолжение темы... smile
http://forum.vingrad.ru/index.php?showtopic=60623

Автор: Guest 15.8.2005, 09:08
Тогда корректно задавай вопросы

Был вопрос:
Цитата

Как назначить указателю Btn событие OnClick?

А оказалось - необходима консультация по слзданию кнопок

Вот здесь ошибка
Код

void test::initbtn(TButton *B)
{
B=new TButton(P);
B->Parent=P;
}

Указатель на кнопку передается по значению и следовательно твое новое значение никуда не передается из функции. Сделай хотя бы так
Код

void test::initbtn(TButton **B)
{
 *B=new TButton(P);
 (*B)->Parent=P;
}

void test::initial()
{
  initbtn(&Btn1);
  initbtn(&Btn2);
  Btn1->OnClick=OnClick;
}




Автор: Vyacheslav 15.8.2005, 09:09
Последний пост мой

Автор: Artemon 19.8.2005, 10:25
Цитата
Указатель на кнопку передается по значению и следовательно твое новое значение никуда не передается из функции.


Вродебы Поручик делает все верно, почему передается значение?

Объясни пожалуйста.

Автор: Hroft 19.8.2005, 16:46
Передается указатель на кнопку. ЛОКАЛЬНАЯ КОПИЯ этого указателя изменяется, выделяется новая память, которая потом теряется, кстати, а кнопка остается старой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)