亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在BCB中使用VCL控件數組

2019-11-17 05:20:25
字體:
來源:轉載
供稿:網友
昨晚和網友鄔彥華在OICQ上閑聊,他言及正在為朋友編一個游戲菜單,其中動態創建了一組按紐,最后卻無法釋放。他的實現方法如下:

for (int i=1;i<=ButtonCount;i++)
{
TSpeedButton *spdBTn=new TSpeedButton(this);
spdBtn->Parent=ScrollBox;//指定父控件
spdBtn->Caption=IntToStr(i);
spdBtn->Width=80;
spdBtn->Height=80;
spdBtn->OnClick=ButtonClick;
spdBtn->Left=intLeft;
spdBtn->Top=intTop;
spdBtn->GroupIndex=1;
spdBtn->Flat=true;
intLeft=intLeft+80+intSpace;
if (i%LineCount==0)
{
intTop=intTop+80+intSpace;
intLeft=intSpace;
}
buttons->Add(spdBtn);//buttons是一個TList的指針
}
最后用TList的Clear()方法無法釋放內存,

其實Clear()方法只是把List清空,要刪除還是得用delete,但是delete運算符必須要有刪除的指針,可這種實現方法無法得到指針!所以我就放棄了這種思路,忽然,電光一閃(不是要打雷了,而是我想出辦法來了),能不能用數組呢?說干就干!數組的分配?我想想,對!

TSpeedButton *Buttons[]=new TSpeedButton[4](this);
可是編譯器告訴我:ERROR!

TSpeedButton *Buttons[]=new TSpeedButton(this)[4]
還是錯!最后我利令智昏,把java的分配方式都拿出來了:


TSpeedButton []*Buttons=new TSpeedButton[](this)

結果么?不用說也知道!難道沒辦法了嗎?我想起了簡單類型的指針數組int x[]={1,2,3};于是就試

TSpeedButton *Buttons[]={new TSpeedButton(this),new TSpeedButton(this),new TSpeedButton(this)};
居然可以了!我正想自得的笑,忽然發現:假如要定義100個按鈕怎么辦……打那么一串重復的字誰受得了?就算是用COPY/PARST也難免要數錯,究竟100次啊。難道就沒法子了?經過苦思冥想,又想起了一個辦法,一步一步的來怎么樣?

TSpeedButton **button=new TButton*[100];
for(int i=0;i<100;i++)button[i]=new TSpeedButton(this);

哈哈!居然OK!再試試釋放:

for(int i=0;i<4;i++)delete x[i];
delete[]x;

哈哈!居然還是OK!于是我就寫了一例子:在一個窗口上放兩按紐,單擊可以顯示或關閉動態生成的按鈕。


首先聲明一個全局變量TButton **x;
然后在Button1的onClick中加入生成代碼:


x=new TButton*[4];
for(int i=0;i<4;i++)
{
x[i]=new TButton(this);
x[i]->Left=100;
x[i]->Top=10+i*30;
x[i]->Width=90;
x[i]->Height=25;
x[i]->Parent=this;
x[i]->Caption="按紐"+AnsiString(i);
}

單擊它就可以生成并顯示4個按鈕,然后在Button2加入釋放代碼:


for(int i=0;i<4;i++)delete x[i];
delete[]x;

運行一試,OK!大功告成!

所以,使用VCL數組的過程是:首先聲明一個二重指針,然后分配所要VCL組件的個數,最后再對每個VCL元件進行分配;在釋放的時侯,要釋放每個VCL元件的資源,最后才回收VCL數組的資源。 三層交換技術 交換機與路由器密碼恢復 交換機的選購 路由器設置專題 路由故障處理手冊 數字化校園網解決方案
我的《BCB中使用VCL控件數組》中,提到了用TList來實現時無法釋放資源的問題,結果今天就得到了答案,鄔彥華等等網友都指教了TList實現的釋放方法,定義代碼同前文:

for (int i=1;i<=ButtonCount;i++)
{
TSpeedButton *spdBtn=new TSpeedButton(this);
spdBtn->Parent=ScrollBox;//指定父控件
spdBtn->Caption=IntToStr(i);
spdBtn->Width=80;
spdBtn->Height=80;
spdBtn->OnClick=ButtonClick;
spdBtn->Left=intLeft;
spdBtn->Top=intTop;
spdBtn->GroupIndex=1;
spdBtn->Flat=true;
intLeft=intLeft+80+intSpace;
if (i%LineCount==0)
{
intTop=intTop+80+intSpace;
intLeft=intSpace;
}
buttons->Add(spdBtn);//buttons是一個TList的指針
}
釋放資源的代碼如下:

int num = button->Count;
for(int i=0;i<num;i++)
{
delete (TSpeedButton *)button->Items[i];
}
其實說穿了就是刪除TList的每一項,不過因為TList->Items的類型是void *,在C/C++中,void *可匹配任何類型,所以只要加一個強制類型轉換(TSpeedButton *)就可以了,當然用(TObject *)等也是可以的,因為TObject是VCL中所有類的基類,而基類的指針是可以指向它的直接或間接子類的。

兩種方法的比較:我上次的方法可說是典型的C++解決方法,而這種方法可說是C++Builder的解決方法,用雙重指針比較靈活、高效,但大家都知道,多重指針可不那么好懂,想當初我曾用過4重指針(不要用那么目光看著我?。胶髞砦易砸讯己苛?。而這次的方法比較好懂,并且能用TList類的方法,使用比較方便,但不如上一種高效,總的來說,兩種方法各有優劣,具體使用那一種,就看個人的喜好了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人午夜视频网址| 国产午夜精品美女视频明星a级| 日本成人免费在线| 日韩精品中文在线观看| 欧美一级视频一区二区| 亚洲欧美一区二区精品久久久| 1769国产精品| 欧美成人午夜激情视频| 亚洲欧美中文字幕在线一区| 性亚洲最疯狂xxxx高清| 在线观看日韩视频| 亚洲2020天天堂在线观看| 久久久精品影院| 91久久综合亚洲鲁鲁五月天| 91精品国产91久久久久久不卡| 成人免费大片黄在线播放| 久久久精品2019中文字幕神马| 中文字幕欧美专区| 国产精品自产拍在线观| 日韩电影免费观看中文字幕| 久久久成人精品| 青草青草久热精品视频在线网站| 国产精品久久综合av爱欲tv| 午夜精品99久久免费| 亚洲精品福利免费在线观看| 久热99视频在线观看| 色妞色视频一区二区三区四区| 欧美成人小视频| 国产精品视频男人的天堂| 午夜精品久久久99热福利| 97婷婷涩涩精品一区| 久热精品在线视频| 国产极品精品在线观看| 17婷婷久久www| 日韩欧美在线视频观看| 国产精自产拍久久久久久蜜| 国产精品一二三视频| 久久久久久久一区二区三区| 国产视频亚洲视频| 亚洲直播在线一区| 97不卡在线视频| 精品综合久久久久久97| www.日本久久久久com.| 成人午夜在线观看| 国产精品网红福利| 国产91色在线|| 亚洲视频综合网| 久久男人资源视频| 成人动漫网站在线观看| 岛国av午夜精品| 欧美成人sm免费视频| xxx欧美精品| 亚洲国产美女精品久久久久∴| 国产精品一香蕉国产线看观看| 亚洲第一色中文字幕| 精品福利在线视频| 国内精品模特av私拍在线观看| 中文字幕日韩av综合精品| 亚洲精品999| 欧美极品少妇与黑人| 国产精品揄拍一区二区| 亚洲精品国产suv| 亚洲视频国产视频| 菠萝蜜影院一区二区免费| 欧美黑人性猛交| 成人一区二区电影| 久久精品这里热有精品| 国产欧美一区二区三区久久人妖| 亚洲高清一二三区| 国产欧美精品一区二区| 国产成人高清激情视频在线观看| 欧美日韩美女在线| 在线日韩第一页| 国产精品免费久久久| 欧美激情一区二区三区在线视频观看| 国产成人精品亚洲精品| 日本高清久久天堂| 国产91精品久| 国产日韩欧美一二三区| 亚洲日本中文字幕| 日韩中文在线不卡| 最近2019免费中文字幕视频三| www日韩欧美| 亚洲国产成人精品久久久国产成人一区| 国产精品444| 日韩电影在线观看免费| 孩xxxx性bbbb欧美| 狠狠躁夜夜躁人人爽天天天天97| 在线丨暗呦小u女国产精品| 欧美一级bbbbb性bbbb喷潮片| 欧美精品在线播放| 亚洲欧美999| 欧美最猛黑人xxxx黑人猛叫黄| 欧美性xxxx极品hd满灌| 中文字幕亚洲一区二区三区| 日韩a**站在线观看| 日韩在线观看免费网站| 亚洲va电影大全| 国产欧美日韩精品丝袜高跟鞋| 日韩成人在线电影网| 九九热这里只有精品免费看| 尤物九九久久国产精品的分类| 久久精品久久久久久国产 免费| 欧美性xxxxxxx| 中日韩美女免费视频网址在线观看| 日韩精品在线观看一区二区| 欧美床上激情在线观看| 北条麻妃一区二区在线观看| 久久天天躁狠狠躁夜夜躁| 78色国产精品| 久久在线精品视频| 久热在线中文字幕色999舞| 国产精品嫩草影院久久久| 国产日本欧美视频| 国产精品中文字幕在线| 亚洲二区在线播放视频| 欧美精品免费在线观看| 日韩黄色高清视频| 久久久久久久久久国产精品| 91美女片黄在线观| 午夜免费在线观看精品视频| xvideos亚洲| 国产999精品| 91在线观看免费网站| 91亚洲午夜在线| 亚洲日本欧美日韩高观看| 日产日韩在线亚洲欧美| 欧美一级淫片播放口| 欧美裸体xxxx| 欧美日韩国产成人在线观看| 亚洲最大成人免费视频| 亚洲精品99久久久久中文字幕| 97在线观看视频国产| 亚洲欧美一区二区三区情侣bbw| 欧美电影在线观看高清| 色综合久久久久久中文网| 日韩欧亚中文在线| 伦理中文字幕亚洲| 韩国福利视频一区| 久久久久久久国产精品视频| 精品国产依人香蕉在线精品| 久久精品国产亚洲精品| 国产精品久久久久福利| 中文字幕日韩精品在线| 日韩福利伦理影院免费| 欧美国产日本高清在线| 亚洲精品一区中文| 色噜噜亚洲精品中文字幕| 国产欧美一区二区| 国产91在线视频| 亚洲成色999久久网站| 日韩av色综合| 久久久久久久久久久人体| 日韩久久精品电影| 欧美人与物videos| 欧美日韩精品在线视频| 海角国产乱辈乱精品视频| 91美女片黄在线观| 精品国内亚洲在观看18黄| 欧美另类极品videosbest最新版本| 国产欧美日韩精品专区| 日韩视频亚洲视频| 精品偷拍一区二区三区在线看| 日韩精品一区二区三区第95|