Borland C++ Builder作为Inprise(原Borland)公司新推出的快速应用程序开发工具(RAD),具有威力强大的C++语言和快捷便利的可视化编程完美结合的优点,遗憾的是其没有直接提供像VB中的控件数组的功能,需要开发者自己编程实现。
VB中的一个控件数组可以1、允许多个控件共享同一个事件句柄,2、提供了运行期间增加一个控件的机制,3、提供了一种方便的组合控件的方法。前两项在C++ Builder中早已实现,而且CB更有一个优点。即不同类型的控件可以使用相同的句柄(只需在相关控件的Object Inspector窗口中的EVENT事件设置即可)。
C++ Builder中使用了Tlist类对象来组合控件数组,与VB控件数组元素必须为同一类型控件相比较,C++ Builder中的Tlist类对象可以组合任意类型的控件而不必强求同一种类,这样就大大地方便了程序开发者。例如可以把在不同Panel面板控件上的所有控件组合为一个控件数组。
作者在开发实时监控程序时,应用Tlist类对象创建、维护了多类型的控件数组。其实现原理与方法详见以下的原程序代码。实例程序实现了动态创建一个包含8个TEdit类型控件和4个TImage类型控件的控件数组,在程序运行中对所创建的控件进行修改、维护的功能(简单起见,只对TImage控件的Parent属性进行了修改,对控件数组中各个控件的属性修改及事件处理句柄均可依此方法修改)。
1、创建一个新的工程文件(New Application),在Form1上放置两个TPanel类型的Panel1和Panel2,调整大小合适,再在窗体下方放置四个TButton类型Button1,Button2,Button3,Button4,设置控件属性如下:Button1->Caption=“新建控件数组”,Button2->Caption=“改变控件位置”, Button3->Caption=“还原到原位置”, Button4->Caption=“退出”;Button2->Enabled=false,Button3->Enabled=false。
(注:以下黑体字部分为需要手工添加的代码)
2、在文件Unit1.H中加入以下声明:
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TPanel *Panel2;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
private: // User declarations
TList *MyVCL;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
virtual __fastcall ~TForm1( );
};
3、切换到工程的Form界面,双击工程的主界面Form,创建一个OnCreate事件句柄,在文件Unit1.CPP中加入以下代码:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MyVCL = new TList;//创建TList对象
}
将TForm1析构函数加入到文件Unit1.CPP中:
__fastcall TForm1::~TForm1()
{
delete MyVCL; //删除TList对象
}
4、双击标签(Caption)为“创建控件数组”的按钮,创建一个OnClick事件句柄,添加以下代码到OnClick事件句柄中:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//创建新的控件,调整其位置,并加入到MyVcl(TList 类)之中
int temptop=5;
for (int i=0;i<4;i++) {
TEdit *EditNow = new TEdit(this);
EditNow->Parent=Panel1;
EditNow->Text= IntToStr(i);
EditNow->ReadOnly=true;
EditNow->Top=temptop;
EditNow->Height=24;
EditNow->Width=24;
EditNow->Left=10;
MyVCL->Add(EditNow); //加入到控件数组中
TImage *ImageOff= new TImage(this);
ImageOff->Parent=Panel1;
ImageOff->Picture->LoadFromFile(“None.BMP”);
ImageOff->Top=temptop;
ImageOff->Height=24;
ImageOff->Width=24;
ImageOff->Left=EditNow->Left+EditNow->Width;
MyVCL->Add(ImageOff); //加入到控件数组中
TEdit *EditStatus = new TEdit(this);
EditStatus->Parent=Panel1;
EditStatus->Font->Name = “Arial”;
EditStatus->Font->Size = 12;
EditStatus->Text=“禁止访问”;
EditStatus->ReadOnly=true;
EditStatus->Top=temptop;
EditStatus->Height=24;
EditStatus->Width=80;
EditStatus->Left= ImageOff->Left+ImageOff->Width;
MyVCL->Add(EditStatus); //加入到控件数组中
temptop=temptop+24+5;
}
Button1->Enabled=false;
Button2->Enabled=true;
}
5、同4所示方法,依次双击标签的标题(Caption)为“改变控件位置”、 “还原到原位置”、 “退出”的按钮,创建对应的OnClick事件句柄,添加以下代码到对应的OnClick事件句柄中:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (int i=0;i<4;i++)
((TImage*)MyVCL->Items[i*3+1])->Parent=Panel2;
Button2->Enabled=false;
Button3->Enabled=true;
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
for (int i=0;i<4;i++)
((TImage*)MyVCL->Items[i*3+1])->Parent=Panel1;
Button3->Enabled=false;
Button2->Enabled=true;
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close(); //关闭窗体
}
由上所述,实际的代码大多只是用于设定控件位置和基本属性,真正实现控件数组功能的代码并不太多,也不复杂,而且十分的灵活;需要注意的是使用TList类对象组合中的各项控件之前,必须先将其强制转换为一个对象指针以指明其类型,才能对其属性进行修改/赋值操作。
本文程序在C++ Builder 3.0/ PWin95,C++ Builder 4.0/ PWin98下调试通过。
分享到:
相关推荐
在C++Builder中,虽然没有直接提供像VB那样的控件数组功能,但通过TList类对象,我们可以模拟出类似的功能,实现控件数组的管理和操作。控件数组允许开发者更方便地管理和操作多个控件,比如共享事件处理、动态添加...
### C++Builder动态对象数组:TList类、DynamicArray与STL中的Vector容器 #### TList 类 在C++Builder中,TList是用于管理动态对象数组的一种方式。它提供了较为简便的方式来创建、管理和销毁一系列对象。TList...
### C++Builder控件数组的实现 #### 1. 问题的提出 在C++Builder的可视组件库(VCL)中,虽然提供了诸如按钮、窗体、对话框、标签等多种常见的Windows部件,为程序员提供了一个直观且易于使用的编程环境,但是它并...
C++Builder是一款强大的集成开发环境,它为C++程序员提供了丰富的可视化组件库,其中包括列表框控件(ListBox)。...在实际项目中,结合C++Builder的事件驱动编程模型,可以实现更多复杂的逻辑和功能。
在C++Builder中,我们经常需要实现动态界面元素的创建与管理,例如根据用户操作实时添加或删除按钮等控件。本文将详细介绍如何在C++Builder中实现动态添加按钮的功能,并允许用户通过鼠标拖动这些按钮。 #### 二、...
在C++ Builder中实现TChart实时显示波形,你需要了解以下关键知识点: 1. **TChart组件**:首先,你需要在你的Form上添加一个TChart组件。通过工具箱或者设计视图,将TChart拖放到界面上,这会自动在你的代码中生成...
在C++Builder中,动态数组允许我们在运行时根据需要分配和管理内存。与静态数组不同,它们不需预先定义大小,可以在程序运行过程中改变大小。创建动态数组通常使用new运算符,例如`int* arr = new int[size];`。记得...
本篇将深入探讨如何在C++Builder中实现动态创建控件数组,并提供相关的实践示例。 一、动态创建控件的基本原理 在C++Builder中,控件(如按钮、文本框等)是对象的实例,它们属于特定的控件类,如TButton、TEdit等...
在C++Builder中实现“俄罗斯方块”,你需要掌握以下几个关键知识点: 1. **图形用户界面(GUI)设计**:C++Builder提供了VCL(Visual Component Library)组件库,你可以使用TForm作为游戏主窗口,添加TLabel显示...
这部分资料可能探讨了如何在C++Builder中实现各种高级界面效果,如动画、透明效果、自定义控件等,使开发者能够创建更具吸引力和用户体验的软件界面。 通过这份合集,无论是初学者还是经验丰富的开发者,都能找到...
【C++Builder简易五子棋】是一款基于C++Builder编程环境开发的桌面游戏,它实现了基本的五子棋对弈功能,让玩家可以与计算机或另一名玩家进行对战。这款程序展示了C++Builder在图形用户界面(GUI)设计和算法实现上...
IdTCPClient是Indy库中的一个控件,用于实现TCP客户端功能,可以用来与远程服务器建立连接并进行数据交换。 4. **创建项目**: 使用C++ Builder IDE创建新项目时,选择uniGUI模板,设置项目的Include path和...
本手册主要关注C++Builder中的库函数,这些函数极大地扩展了标准C++的功能,帮助开发者实现复杂的任务。 一、C++Builder库函数概述 C++Builder的库函数主要分为几个部分,包括VCL(Visual Component Library)库、...
综上所述,本实例展示了如何在C++ Builder中结合控件、图形绘制和定时器事件来创建一个实时监控的温度计应用。这种设计思路可以应用于各种实时数据显示的工程系统,例如工业自动化、环境监测等领域。
例如,通过列主元高斯消去法求解方程组的程序,不仅可以展示如何使用C++Builder开发应用程序,还包括程序调试技术,如动态控件数组的技巧。在文本处理程序章节中,会介绍到菜单组件、文本组件以及工具栏等组件的使用...
1.1.2 C++ Builder控件的使用方法 1.1.3 有关计算器制作中用到控件的介绍 1.2 编程思路 1.3 操作步骤 1.4 创意与超越 1,5 本章小结 第2章 单窗口文本编辑器 2.1 基础知识 2.1.1 ...
在C++ Builder中,我们可以使用VCL(Visual Component Library)框架来构建这些功能。VCL提供了大量的预定义组件,如TForm用于创建窗口,TButton、TEdit和TLabel等用于构建用户界面。 1. **用户登录模块**:通常,...
通过这个源码示例,开发者可以学习如何在C++ Builder中集成Excel功能,实现灵活的数据处理,这对于那些需要临时数据库或不希望依赖传统数据库引擎的项目非常有用。同时,这也展示了C++ Builder的VCL框架如何与其他...