手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

BCB中实现动态创建组件

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
BCB中实现动态创建组件 ch_builder (原作)
(仅供CSDN和ccrun.com使用,其他使用者请和作者联系)

BCB中提供了大量的VCL组件,有时难免要在程式中动态创建组件,VCL是用Object Pascal写的,她和C 语言还是存在着一些不同点的,要掌控正确的方法,不防我们先来看一下栈(stack)和堆(heap)的关系。

栈(stack)是存放函数的任何动态局部变量及函数调用和返回的有关信息的一块内存。栈的内存管理严格遵循先进后出的顺序,这一点正是实现函数调用所需要的。从栈中分配内存效率特别高。数据对象使用栈中的内存(如动态局部变量)比使用堆中内存会使程式运行更快。

堆(heap)是供malloc()、calloc()、realloc()和new等函数获取内存空间的一块内存。从堆中获取内存比从栈中要慢得多,但堆的内存管理却比栈灵活得多,任何时候您都能够从堆中获取(或释放)内存,我们能够按任意顺序进行。用来存放递归数据结构的内存几乎都要从堆中获取。用来存放字符串的内存通常也从堆中获取,尤其是对那些在程式运行时可能出现的很长的字符串。

从堆中获取的内存要用free()、delete来释放,他本身不会自动释放。

C编译的程式能产生如此优质的代码、程式运行的快速和对栈的正确运用是有关的,但Object Pascal中任何的对象都只能建构于堆中,无法和C 相同,能够在栈(在函数内创建类的对象)、数据区段(在函数外创建类的对象)、堆(用new等函数来创建类的对象)三种地方建立对象,所以VCL类的对象我们只能在堆中创建。

如创建一个按钮对象,我们能够这样来创建:

TButton *btnMy= new Tbutton(From1);

能够写成如下程式:类名 *对象名=new 类名(…);

注意:()里面能够是您已创建的该类对象的父类名字、工程的名字、NULL或this。但最好是对象的父类名。

例:动态生成按钮

我们先在窗体(Form1)上,放一个按钮Button1,在他的单击事件中写上如下代码:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

TButton *my=new TButton(Form1);

my->Parent=Form1;//最为关键的一句,否则您将看不到什么,但编译却是正确的

my->Top=200;

my->Left=200;

my->Height=25;

my->Width=75;

my->Caption="I'm Button!";

//my->Visible=true;此语句可有可无,因为他的父类通常默认他可见

}

通过这个例子我们应该清楚的看出动态创建组件的几个重要步骤:

1)要一个空间(内存);// TButton *my=new TButton(Form1);

2)指定其父组件,说直接了就是我们要创建的这个对象要放在那个容器上;// my->Parent=Form1;

3)指定组件要出现在父类的那个位置;//my->Top=200;my->Left=200;my->Height=25; my->Width=75;所以这个属性您一定要配置好位置;

4)其他重要属性。// my->Caption="I'm Button!";

并且其顺序不能反了,否则您的程式会出笑话的。

在动态生成非宝兰VCL原有的组件时要加上对应的头文档。如,我们要动态生成报表组件一定要加入:

#include “Qrctrls.hpp”//若更有问题,您还要加入:

#include “QuickRpt.hpp”

另外由于BCB对内存管理或和系统、硬件的冲突,您的动态创建程式也许一点错误都没有,但就是编译不了;有时也许第一次通过了,第二次相同的程式却通过不了,出现这样那样的提示,最简单的办法就是注销一下系统,再试一下,多数就能解决了。




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS