-
c语言入门之BCB动态生成30个按钮对象
重要:BCB程序机制是:窗体上的所有对象与窗体本身都成为一个类:TForm1,我们就是将类成员与类成员函数写到TForm1类中,程序运行时,实际上就是通过TForm1 类生成Form1对象,所以,Unit1.cpp中的函数都以void __fastcall TForm1::打头,这就表明这些函数都是TForm1类的类成员函数,它们可以调用在类中我们定义的类成员。当然,我们可以在Unit1.cpp中定义我们自己的变量和函数,供其它函数调用,这点符合C调用规范。当然,这种类外界的函数是不能调用到TForm1类中定义的类成员与类成员函数的,除非是公有成员与公有成员函数,但必须在公有成员与公有成员函数前加上对象名称,即Form1->TForm1类公有成员(或TForm1类公有成员函数)。
1、本例是BCB面向对象设计的精髓,完全是利用类生成对象机制。
2、新建立一个BCB工程,在上面放一个按钮Button1
3、Unit1.h
////---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: //// IDE-managed Components
TButton *Button1;
void __fastcall Button1ClickClick(TObject *Sender);
private: // User declarations
////定义类私有成员函数,用来删除所有已生成的按钮
void __fastcall DeleteAllBn(void);
////定义类私有成员函数,用来生成共公响应事件
void __fastcall BtnClick(TObject *Sender);
////定义大小为30的按钮类对象
TButton *Bn[30];
////用来记录已生成按钮的数量
int BnCount;
public: //// User declarations
////窗体类的构造函数
__fastcall TForm1(TComponent* Owner);
////窗体类的析构函数
__fastcall ~TForm1();
};
__fastcall TForm1::~TForm1()
{
////在析构函数中将已生成的按钮对象删除
DeleteAllBn();
}
////---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
////---------------------------------------------------------------------------
#endif
4、Unit1.h
TForm1 *Form1;
////---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//// 释放所有资源
void __fastcall TForm1::DeleteAllBn(void)
{
int ii;
for(ii=0;ii<BnCount;ii++)
{
delete Bn[ii];
}
}
////---------------------------------------------------------------------------
void __fastcall TForm1::Button1ClickClick(TObject *Sender)
{
int ii,yy,ww;
ww=12;yy=45;
//// 释放所有资源
DeleteAllBn();
ShowMessage("所有原先生成的资源都已释放!!!按任意键重新生成!!!");
for(ii=0;ii<30;ii++)
{
Bn[ii]=new TButton(this);
Bn[ii]->Parent=this;
////置响应函数
Bn[ii]->OnClick=BtnClick;
Bn[ii]->Caption=IntToStr(ii);
////根据窗口的宽度布置按钮的位置
if(ww+Bn[ii]->Width+5>Width)
{
yy=yy+Bn[ii]->Height+5;
ww=12;
}
Bn[ii]->Left=ww;
Bn[ii]->Top=yy;
ww=ww+Bn[ii]->Width+5;
}
////标记当前生成了多少个按钮
BnCount=30;
}
////公共响应函数
void __fastcall TForm1::BtnClick(TObject *Sender)
{
TButton *cn;
cn=(TButton *)Sender;
ShowMessage(cn->Caption);
}
////---------------------------------------------------------------------------
1、本例是BCB面向对象设计的精髓,完全是利用类生成对象机制。
2、新建立一个BCB工程,在上面放一个按钮Button1
3、Unit1.h
////---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: //// IDE-managed Components
TButton *Button1;
void __fastcall Button1ClickClick(TObject *Sender);
private: // User declarations
////定义类私有成员函数,用来删除所有已生成的按钮
void __fastcall DeleteAllBn(void);
////定义类私有成员函数,用来生成共公响应事件
void __fastcall BtnClick(TObject *Sender);
////定义大小为30的按钮类对象
TButton *Bn[30];
////用来记录已生成按钮的数量
int BnCount;
public: //// User declarations
////窗体类的构造函数
__fastcall TForm1(TComponent* Owner);
////窗体类的析构函数
__fastcall ~TForm1();
};
__fastcall TForm1::~TForm1()
{
////在析构函数中将已生成的按钮对象删除
DeleteAllBn();
}
////---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
////---------------------------------------------------------------------------
#endif
4、Unit1.h
TForm1 *Form1;
////---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//// 释放所有资源
void __fastcall TForm1::DeleteAllBn(void)
{
int ii;
for(ii=0;ii<BnCount;ii++)
{
delete Bn[ii];
}
}
////---------------------------------------------------------------------------
void __fastcall TForm1::Button1ClickClick(TObject *Sender)
{
int ii,yy,ww;
ww=12;yy=45;
//// 释放所有资源
DeleteAllBn();
ShowMessage("所有原先生成的资源都已释放!!!按任意键重新生成!!!");
for(ii=0;ii<30;ii++)
{
Bn[ii]=new TButton(this);
Bn[ii]->Parent=this;
////置响应函数
Bn[ii]->OnClick=BtnClick;
Bn[ii]->Caption=IntToStr(ii);
////根据窗口的宽度布置按钮的位置
if(ww+Bn[ii]->Width+5>Width)
{
yy=yy+Bn[ii]->Height+5;
ww=12;
}
Bn[ii]->Left=ww;
Bn[ii]->Top=yy;
ww=ww+Bn[ii]->Width+5;
}
////标记当前生成了多少个按钮
BnCount=30;
}
////公共响应函数
void __fastcall TForm1::BtnClick(TObject *Sender)
{
TButton *cn;
cn=(TButton *)Sender;
ShowMessage(cn->Caption);
}
////---------------------------------------------------------------------------
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式