重要:BCB程序機制是:窗體上的所有對象與窗體本身都成為一個類:TForm1,我們就是將類成員與類成員函數(shù)寫到TForm1類中,程序運行時,實際上就是通過TForm1 類生成Form1對象,所以,Unit1.cpp中的函數(shù)都以void __fastcall TForm1::打頭,這就表明這些函數(shù)都是TForm1類的類成員函數(shù),它們可以調(diào)用在類中我們定義的類成員。當然,我們可以在Unit1.cpp中定義我們自己的變量和函數(shù),供其它函數(shù)調(diào)用,這點符合C調(diào)用規(guī)范。當然,這種類外界的函數(shù)是不能調(diào)用到TForm1類中定義的類成員與類成員函數(shù)的,除非是公有成員與公有成員函數(shù),但必須在公有成員與公有成員函數(shù)前加上對象名稱,即Form1->TForm1類公有成員(或TForm1類公有成員函數(shù))。 1、本例是BCB面向?qū)ο笤O(shè)計的精髓,完全是利用類生成對象機制。 2、新建立一個BCB工程,在上面放一個按鈕Button1 3、Unit1.h ////--------------------------------------------------------------------------- class TForm1 : public TForm { __published: //// IDE-managed Components TButton *Button1; void __fastcall Button1ClickClick(TObject *Sender); private: // User declarations ////定義類私有成員函數(shù),用來刪除所有已生成的按鈕 void __fastcall DeleteAllBn(void); ////定義類私有成員函數(shù),用來生成共公響應(yīng)事件 void __fastcall BtnClick(TObject *Sender); ////定義大小為30的按鈕類對象 TButton *Bn[30]; ////用來記錄已生成按鈕的數(shù)量 int BnCount; public: //// User declarations ////窗體類的構(gòu)造函數(shù) __fastcall TForm1(TComponent* Owner); ////窗體類的析構(gòu)函數(shù) __fastcall ~TForm1(); }; __fastcall TForm1::~TForm1() { ////在析構(gòu)函數(shù)中將已生成的按鈕對象刪除 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; ////置響應(yīng)函數(shù) Bn[ii]->OnClick=BtnClick; Bn[ii]->Caption=IntToStr(ii); ////根據(jù)窗口的寬度布置按鈕的位置 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; } ////公共響應(yīng)函數(shù) void __fastcall TForm1::BtnClick(TObject *Sender) { TButton *cn; cn=(TButton *)Sender; ShowMessage(cn->Caption); } ////---------------------------------------------------------------------------
|