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的宣告
留言
張貼留言