明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

BCB動態(tài)生成30個按鈕對象

[摘要]重要:BCB程序機制是:窗體上的所有對象與窗體本身都成為一個類:TForm1,我們就是將類成員與類成員函數(shù)寫到TForm1類中,程序運行時,實際上就是通過TForm1 類生成Form1對象,所以,Unit1.cpp中的函數(shù)都以void __fastcall TForm1::打頭,這就表明這些函數(shù)都...
重要:BCB程序機制是:窗體上的所有對象與窗體本身都成為一個類:TForm1,我們就是將類成員與類成員函數(shù)寫到TForm1類中,程序運行時,實際上就是通過TForm1 類生成Form1對象,所以,Unit1.cpp中的函數(shù)都以void __fastcall TForm1::打頭,這就表明這些函數(shù)都是TForm1類的類成員函數(shù),它們可以調(diào)用在類中我們定義的類成員。當(dāng)然,我們可以在Unit1.cpp中定義我們自己的變量和函數(shù),供其它函數(shù)調(diào)用,這點符合C調(diào)用規(guī)范。當(dāng)然,這種類外界的函數(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;
  }
  ////標(biāo)記當(dāng)前生成了多少個按鈕
  BnCount=30;
}
////公共響應(yīng)函數(shù)
void __fastcall TForm1::BtnClick(TObject *Sender)
{
  TButton *cn;
  cn=(TButton *)Sender;
  ShowMessage(cn->Caption);
}
////---------------------------------------------------------------------------