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


Автор: Vovanuch 8.3.2006, 08:02
Создается кнопка:

TButton * But = new TButton(Form1);
But->Parent=Form1;
But->Top=50;
But->Left=50;
But->Visible=true;

Как назначить ей какие-либо действия при клике? Что-нибудь вроде
But->OnClick
{
int a=10;
}

Автор: Werti 8.3.2006, 11:06
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton * But = new TButton(Form1);
But->Parent=Form1;
But->Top=50;
But->Left=50;
But->Visible=true;
But->OnClick= Button2Click; //при создании задаем парамет
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Close();
}

Нажмешь на кнопку которую ты создал динамический и она выполнить But->OnClick= Button2Click; код нажатия второй кнопочки.



Автор: Vovanuch 8.3.2006, 12:02
Werti, спасибо, но мне нужно чтобы эта кнопка выполняла свои уникальные действия.
Смысла особого дублировать кнопку не вижу.)

Автор: tigger 8.3.2006, 12:53
Код


void __fastcall TForm1::NewClick(TObject *Sender)
{
Application->MessageBoxA("Нажата кнопка","Сообщение", MB_OK);
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
TButton * But = new TButton(Form1);
But->Parent=Form1;
But->Top=50;
But->Left=50;
But->Visible=true;
But->OnClick = NewClick;
}



smile

Автор: Vovanuch 8.3.2006, 15:23
Да, работает, благодарю))) Только NewClick еще в .h-файле прописывать надо)

Автор: tigger 9.3.2006, 12:56
Ну это само собой!!!

Автор: ZufuS 13.7.2006, 00:37
Помогите плиз: есть массив компонентов
Код

TButton *p[16]; 
for(int i=0; i<16; i++) p[i] = new TButton(Form1); 
p[i]->Parent = Form1;
 и нужно сделать, чтобы OnClick обрабатывал каждый элемент массива в зависимости от индекса. 
Если в цикл записать
Код

p[i]->OnClick = NewClick;
, то при кликании кнопки, i все время равно 16  

Если добавить параметр в объявление функции 
Код

void __fastcall NewClick(int ii, TObject *Sender);
, то компилятор ругается на строчку p[i]->OnClick = NewClick(i);
и пишет Too few parameters in call to '_fastcall TForm1::NewClick(int,TObject *)'.  

Автор: 586 13.7.2006, 00:52
НЕ совсем понял, чего ты хотел
Код
TButton *p[16]; 
for(int i=0; i<16; i++)
{
 p[i] = new TButton(Form1); 
 p[i]->Parent = Form1;
 p[i]->OnClick=NewClick;
 p[i]->Tag=i;        // индекс
}

Код
void __fastcall TForm1::NewClick(TObject *Sender)
{
 int index;
 index=((TButton*)Sender)->Tag;
 // index -- номер кнопки в массиве
}
 
ЗЫ  Один топик - один вопрос  

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