在BCB中使用VCL控件数组2

撒打算阿斯601

撒打算阿斯601

2016-02-19 16:34

下面是个超简单的在BCB中使用VCL控件数组2教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

  我的《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的指针
}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  释放资源的代码如下:

  

int num = button-Count;
for(int i=0;inum;i++)
{
delete (TSpeedButton *)button-Items[i];
}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  其实说穿了就是删除TList的每一项,不过因为TList-Items的类型是void *,在C/C++中,void *可匹配任何类型,所以只要加一个强制类型转换(TSpeedButton *)就可以了,当然用(TObject *)等也是可以的,因为TObject是VCL中所有类的基类,而基类的指针是可以指向它的直接或间接子类的。

  两种方法的比较:我上次的方法可说是典型的C++解决方法,而这种方法可说是C++Builder的解决方法,用双重指针比较灵活、高效,但大家都知道,多重指针可不那么好懂,想当初我曾用过4重指针(不要用那么目光看着我!),到后来我自已都糊涂了。而这次的方法比较好懂,并且能用TList类的方法,使用比较方便,但不如上一种高效,总的来说,两种方法各有优劣,具体使用那一种,就看个人的喜好了。

展开更多 50%)
分享

猜你喜欢

在BCB中使用VCL控件数组2

编程语言 网络编程
在BCB中使用VCL控件数组2

在BCB中使用VCL控件数组1

编程语言 网络编程
在BCB中使用VCL控件数组1

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在BCB中轻松使用ActiveX控件

编程语言 网络编程
在BCB中轻松使用ActiveX控件

在Delphi中巧改窗体文件实现控件数组

编程语言 网络编程
在Delphi中巧改窗体文件实现控件数组

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

深入VCL理解BCB的消息机制2

编程语言 网络编程
深入VCL理解BCB的消息机制2

在Delphi中巧改窗体文件实现控件数组化

Delphi
在Delphi中巧改窗体文件实现控件数组化

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

改变DBGrid的颜色

改变DBGrid的颜色

行业细分网站创业投资少、风险低、回报大

行业细分网站创业投资少、风险低、回报大
下拉加载更多内容 ↓