BCB動態生成控制元件

mrhaozi發表於2010-01-22

重要: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 {
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);
}
////---------------------------------------------------------------------------

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16396910/viewspace-1030816/,如需轉載,請註明出處,否則將追究法律責任。

相關文章