在BCB中使用VCL控件数组1

古炙音

古炙音

2016-02-19 16:34

下面图老师小编要向大家介绍下在BCB中使用VCL控件数组1,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

  昨晚和网友邬彦华在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()方法无法释放内存,

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

  其实Clear()方法只是把List清空,要删除还是得用delete,但是delete运算符必须要有删除的指针,可这种实现方法无法得到指针!所以我就放弃了这种思路,忽然,电光一闪(不是要打雷了,而是我想出办法来了),能不能用数组呢?说干就干!数组的分配?我想想,对!

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

  可是编译器告诉我:ERROR!

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

  还是错!最后我利令智昏,把JAVA的分配方式都拿出来了:

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

  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;i100;i++)button[i]=new TSpeedButton(this);

  哈哈!居然OK!再试试释放:

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

  delete[]x;

  哈哈!居然还是OK!于是我就写了一例子:在一个窗口上放两按纽,单击可以显示或关闭动态生成的按钮。

  首先声明一个全局变量TButton **x;

  然后在Button1的onClick中加入生成代码:

  

x=new TButton*[4];
for(int i=0;i4;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;i4;i++)delete x[i];

  delete[]x;

  运行一试,OK!大功告成!

  所以,使用VCL数组的过程是:首先声明一个二重指针,然后分配所要VCL组件的个数,最后再对每个VCL元件进行分配;在释放的时侯,要释放每个VCL元件的资源,最后才回收VCL数组的资源。

展开更多 50%)
分享

猜你喜欢

在BCB中使用VCL控件数组1

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

在BCB中使用VCL控件数组2

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

s8lol主宰符文怎么配

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

在BCB中轻松使用ActiveX控件

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

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

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

lol偷钱流符文搭配推荐

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

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

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

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

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

lolAD刺客新符文搭配推荐

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

美橙建站宝典:域名陷阱见招拆招

美橙建站宝典:域名陷阱见招拆招

Win10系统下如何隐藏文件

Win10系统下如何隐藏文件
下拉加载更多内容 ↓