BCB中实现动态创建组件

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
     (仅供CSDN使用,其他使用者请与作者联系

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 类名(…);

注意:()里面可以是你已创建的该类对象的父类名字、工程的名字、NULLthis。但最好是对象的父类名。

例:动态生成按钮

我们先在窗体(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对内存管理或与系统、硬件的冲突,你的动态创建程序也许一点错误都没有,但就是编译不了;有时也许第一次通过了,第二次一样的程序却通过不了,出现这样那样的提示,最简单的办法就是注销一下系统,再试一下,多数就能解决了。


BCB组件pngimage,让bcb支持png BCB用的的组件Pngimage。 安装方法:新建一个package,将四个*.pas文件加入package,然后编译安装。 立即下载

相关推荐

BCB中用Sender参数实现代码重用

转载自:http://blog.csdn.net/ch_builder/article/details/16579 面向对象的编程工具的特点之一就是要提高代码重用性(Reuse),宝兰的BCB当然可以实现这一功能。我们都知道,在BCB中,大部分程序代码都直接或间接的对应着一个事件,此程序称为事件处理句柄,它实际上就是一个过程。从应用程序的工程到窗口、组件和程序,BCB强调的是其开发过程中每一层次

HappierRaining 555

BCB 编写 DLL 终极手册

  BCB 编写 DLL 终极手册前言网络上流传的BCB编写和调用DLL的方法多来源于一篇《BCB 编写 DLL 终极手册》,多数网站在转载此文章时也并未注明出处和作者,甚为心寒,且在转载过程中难免有纰漏,致使一些例子无法正确运行,我根据网络资料,重新整理了一下,发布出来。如欲转载,请注明出处和作者,并向作者发一封邮件,谢谢。 一.注意:创建动态链接库时,如果想你创建的动态链接库并非只

网络旋男的专栏 1959

BCB消息机制

方法1。使用消息映射(Message Map)重载TObject的Dispatch虚成员函数 BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER( … …) END_MESSAGE_MAP( …) 熟悉MFC都知道,上面其实是定义了一段消息处理的宏 e.g BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(WM_PAINT,TMess

gaiazhang‘s blog 1677

BCB编写dll

一.注意:创建动态链接库时,如果想你创建的动态链接库并非只用于Borland开发工具,那么就需要遵循发下规则:(1).在导出函数的返回值和参数中不要使用Borland特有的数据类型和结构体,如AnsiString之类,请使用C/C++标准的数据类型或使用 C/C++标准数据类型定义的结构体(特别不要使用String数据类型,BCB DLL向导生成的DLL工程文件中大篇幅的说明就是对...

diexiequ0204的博客 253

灵活运用面向对象的思想在BCB5中进行高效编程

灵活运用面向对象的思想在BCB5中进行高效编程 注:这篇文章是2001年写的,当时正初涉OO。    面向对象的开发方法已成为目前软件开发的主流,其技术已日趋成熟,但许多的程序员仍然习惯于过程式的编程方式,这有许多原因,比如使用象VC这样的开发环境,容易使C++程序员将注意力主要集中于开发实现软件功能代码的细节上,反而忽略了对C++面向对象的设计思想。Borland公司开发的C++Bu

bitfan(数字世界一凡人)的专栏 2543

BCB实现动态创建组件 (转)

BCB实现动态创建组件 (转)[@more@] (仅供CSDN使用,其他使用者请与作者联系) BCB中提供了大量的VCL组件,有时难免要在程序中动态创建组件,VCL是用object Pascal写的,她与C++语言还是存...

csd3176的博客 239

BCB实现动态创建组件[ch_builder(原作)]

(仅供CSDN使用,其他使用者请与作者联系) BCB中提供了大量的VCL组件,有时难免要在程序中动态创建组件,VCL是用Object Pascal写的,她与C++语言还是存在着一些不同点的,要掌握正确的方法,不防我们先来看一下栈(stack)与堆(heap)的关系。栈(stack)是存放函数的所有动态局部变量及函数调用和返回的有关信息的一块内存。栈的内存管理严格遵循先进后出的顺序,这一点正是实

一叶舟轻 1883

动态创建组件、用Sender实现代码重用、ActiveX控件的使用

动态创建组件、用Sender实现代码重用、ActiveX控件的使用 2010年06月06日   一、动态创建组件   BCB中提供了大量的VCL组件,有时难免要在程序中动态创建组件,VCL是用Object Pascal写的,她与C++语言还是存在着一些不同点的,要掌握正确的方法,不防我们先来看一下栈(stack)与堆(heap)的关系。   栈(stack)是存放函数的所有动态局...

am074am 354

BCB 动态创建组件的事件响应

http://blog.csdn.net/sding/article/details/3996758 学习BCB中的历程,一点点的记录下来,呵呵 class PACKAGE MyTPanel : public TPanel { private: TLabel *lblToday; void __fastcall lblTodayClick(TObject *Sender

zb872676223的专栏 1673

BCB使用小技巧(1)

 1.如何取得Memo的行和列   新建一个应用,在窗体Form1上添加两个TLabel组件名为Label1,Label2;添加两个TButton组件名为Button1,Button2;添加一个TMemo组件名为Memo1。然后在代码编辑器中添加以下代码。void __fastcall TForm1::Button1Click(TObject *Sender){         Label1-

Y___Y的专栏 4315

闲谈BCB(四)

新的一夜又开始了,我还得继续我的闲聊。现在的男人真的很累,上班,回家做饭,也许晚上还要和朋友出去喝酒,没办法哪样你不得去做,所以吓得我连婚都不敢结:P:P这些可别让女朋友看到,看到那就完了:)  Items并不只是那几类组件特有的属性,她也许还会是ListBox、CheckListBox、TreeView或ListView等几个组件的属性,而不可能是文本性质组件的属性,在文本属性是用的是Lin

ch_builder的专栏 1855

BCB中使用VCL控件数组

BCB中使用VCL控件数组(一) 抱雪 昨晚和网友邬彦华在OICQ上闲聊,他言及正在为朋友编一个游戏菜单,其中动态创建了一组按纽,最后却无法释放。他的实现方法如下: for (int i=1;i{ TSpeedButton *spdBtn=new TSpeedButton(this); spdBtn->Parent=ScrollBox;//指定父控件 spdBtn->Caption=IntToS

1724

闲谈BCB(四) (转)

闲谈BCB(四) (转)[@more@]新的一夜又开始了,我还得继续我的闲聊。现在的男人真的很累,上班,回家做饭,也许晚上还要和朋友出去喝酒,没办法哪样你不得去做,所以吓得我连婚都不敢结:P:P这些可别让女朋友看到,看到那就完了...

csd3176的博客 235

(32)uniGUI for cBuilder下如何动态创建控件

(中行雷威2019.5.30) (同一个世界,同一个梦想,交流学习C++Builder and Delphi XE10,传承c++builder and Delphi的魅力!欢迎各地朋友加入我的QQ群484979943、860634510、299497712,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群。) 【阅读倡议...

路在脚下 1238

C++ Builder 初学问与答(七)

 53)问:能介绍一下TTreeNodes与TTreeNode? 答:在BCB中,树状视图的节点是通过TTreeNodes对象来管理的,通过这个对象可以对树状视图进行动态的增加、删除、插入、移动节点等操作。而每一个节点都是一个TTreeNode对象。  TTreeNode的主要属性和函数:  Count:这个属性用来返回某个节点所拥有的子节点的数目。它不包括其子节点。  Ite

.NET快速开发框架 1414
上一篇: C++ Builder 初学问与答 (十二)
下一篇: 网络电视的头文件
ch_builder
博客等级 码龄24年 76粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值