BCB 動態建立物件


以建立36個TShape物件為例,並以9*4的矩陣方式顯示

在XXX.h裡面的class中的public裡面設定要動態建立的物件或事件,否則會出現錯誤

public: // User declarations
        __fastcall TForm1(TComponent* Owner);
        TShape *shape[36];                                              //要動態建立的物件
       //物件名稱 *變數名稱
        void __fastcall TForm1::shapeMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y) ;                     //若有要動態建立的事件也建立在此

};

在視窗產生的(或其他)事件的程式中輸入以下程式碼


 int heigh = 40 , j=1 ;
        for(int i=0 ;i< nod ; i++){
                shape[i] = new TShape(Form1);                    
               if(i>1 && i%4==0)heigh = heigh + 40 ;             //4個則往下,若放在下面則順序關係第0個會與第4個重疊
                shape[i]->Parent = Form1;               //Parent  顯示
                shape[i]->Width = 40;                     //設定寬度
                shape[i]->Height = 40;                     //設定高度
                shape[i]->Top = heigh;                    //設定視窗位置,最上方為0
                shape[i]->Left = 40;                       //設定視窗位置,最左邊為0
                shape[i]->Name = AnsiString("shpName") + IntToStr(i);     //設定name
                shape[i]->Tag = i ;                                     //物件的標記,為了判斷哪個物件促發事件(項是滑鼠點哪個shape)
                shape[i]-> OnMouseDown =  shapeMouseDown;      //將事件改名
                if(i%4==0 || i==0){                               //若4個則重頭排
                        shape[i]->Left = 40;
                        j=1;
                }else{
                        j++;
                        shape[i]->Left = shape[i]->Left *j ;
                }
                shapeTF[i] = false;                               //點選時修改之紀錄
        }



 void __fastcall TForm1::shapeMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y){
         // 輸入觸發事件時要執行的動作
}




補充*
在每個物件的屬性中,都有一個Tag屬性,這個屬性是一個標記 
假設目前有5個shape分別把5個shape的Tag設成1~5 

在程式中可以寫成 

void __fastcall mybuttonClick(Object *Sender) 

int WhichClick=((TButton *)Sender)->Tag; 

switch(WhichClick){ 
case 1: .... 
case 2: .... 
..... 



要在在每個Button的OnClick設成此Fuction(mybuttonClick)
要在在.h檔中加入此Fuction的宣告


留言

這個網誌中的熱門文章

SQL SEVER備份與還原遭遇問題

asp.net頁面間傳值