c++ builder基本知识
- 格式:doc
- 大小:78.00 KB
- 文档页数:17
第2讲C++ Builder编程基础1 基本概念和术语1.1 对象简单地说,对象就是东西。
在计算机中,对象本身可以描述成“一组逻辑上相关联,可以从外部进行有限访问的数据”。
对象是我们感兴趣的或要加以研究的事物,它是数据与操作相结合的统一体。
对象的基本思想是用系统的观点把要研究的事物看成一个整体。
●抽象●封装●继承●多态●动态绑定对象是面向对象程序设计(OOP)的基本概念和核心。
在面向对象的程序设计中,用于生产对象的类必须由用户来设计,而在C++ Builder中,已经有大量现成的类,这些类的集合即是VCL——Visual Component Library。
有很大一部分的VCL以可视化的方式已经安装在组件面板上。
如窗体、按钮、标签和编辑框等,用户可以直接把它们拖到设计器中的窗体上使用。
1.2 属性对象的属性就是对象的特征、状态等。
不同的对象具有不同的属性。
我们把各个对象的所有属性的集合称为“属性表”。
C++ Builder中的每个组件都有一个属性表。
属性表显示在对象监视器的“Property”页中。
通过修改对象监视器“Property”页中属性表中的值,可以获得该组件的各种具有不同性质和外观的对象。
1.3 事件事件指发生在对象上的一些事情。
对于窗体对象,发生在它上面的事件可能有鼠标单击、双击、右击、最大化、最小化等。
Windows程序是基于事件驱动的,它意味着程序大部分时间是在等待某个事件,以触发程序做某件事情,比如移动鼠标、单击某个按钮、双击鼠标等,这也是Windows程序与DOS 程序最重要的区别之一。
事件可以分为用户事件和系统事件两种。
不管是什么事件,C++ Builder只关心用户是否编写了代码来处理该事件。
如果有,则执行代码,否则,应用程序不会做任何事情。
为事件添加事件响应函数的步骤:●选中组件●在对象监视器中,切换至Events页●双击Events中此事件的标题栏,进入代码编辑器●添加此事件所要执行的代码下图显示了C++ Builder为一个按钮生成的单击事件响应函数的框架。
C++Builder的基本功能我们用高级语言写程序,我们很得意,因为高级语言比较接近人类的语言,使我们用起来得心应手,所以我们当然得意。
但我们更得意的一定是让程序代码赶快变成可执行文件。
无论是在写代码的过程,还是最后要编译成可执行文件,都需要有一个工具存在。
这一工具一般称为编程集成环境(IDE)。
之所以称为集成,是因为从写代码到最后软件的出炉,我们需要它的地方实在太多了,这里列出其中最重要的功能项。
1、代码编辑:方便的代码编辑功能。
尽管你可以使用记事本、Word或其它任何文本编辑器来写代码,但除非特殊需要,否则那将是极为低效的方法。
相反,现在的编程集成环境,都相当的智能,举例如:代码自动功能,可以在很多情况下自动完成我们所需的代码,既准确还迅速。
Borland公司出品的编程集成环境不仅有常见的关键字高亮等功能,还支持代码模板,支持键盘宏,同样支持高级的脚本插件功能。
2、界面设计:可视化的程序界面设计功能。
你所要产生的窗口,在设计期间就真实地出现,包括字体、颜色和定位。
比如:你不仅可以插入falsh的动画,而且无需运行,就直接可以在你的界面上看到该动画的演播,这是别的编程环境不能做到的。
3、程序编译:这是编程工具的主要功能。
我们写的代码在成为机器能懂的可执行程序时,必须通过编译。
4、程序调试:如何尽量减少你程序的BUG呢?没有编程集成环境提供的强大调试功能,我们做的程序将毫无质量保证。
5、代码优化:Borland 提供的编译器,不仅在编译速度上一直在美国屡获大奖,而且其代码自动优化功能一直领先对手几近一个时代。
使用编程集成环境,我们可以轻松获得更快更优的最终可执行程序文件。
6、辅助程序安装:程序的安装已属于另外一种工具的范畴,但我们仍可以通过编程集成环境来决定最终生成单一可执行文件,还是带有其它动态库。
如果是后者,我们还可以通过集成环境来检查程序运行时调用了哪些动态库文件。
C++Builder 提供的功能远不止我上面所说的,并不是因为我嘴笨,而是我认为对一个工具,你只有动手使用,才会真正了解它。
C++ Builder 初学问与答(一)第一部分:基础入门1.窗体1)问:Windows的编程就是在窗体的基础上实现的,C++Builder是怎样处理窗体的呢?答:窗体的一部分功能通过窗体的属性来实现,窗体的属性非常多,这里只对其中比较重要的属性进行介绍。
1.ActiveControl指定窗体上的某个组件为输入焦点。
如下面的语句将窗体上的Label1组件成为输入焦点:ActiveControl=Label1。
在同一时时刻,应用程序只能有一个输入焦点。
2.BorderIcons用来设定标题栏上出现哪些系统图标。
它是一个集合,可以设成以下几个类型:最大化按钮(biMaximize)、最小化按钮(biMinimize)、帮助按钮(biHelp)和系统菜单(biSystemMenu)。
3.Icon属性用来指定当窗体最小化时显示的图标。
4.KeyPreview属性为true时,表示击键事件发生时先传给窗体,然后再传给有输入焦点的组件上,相当于窗体截获了原本属于组件的事件。
缺省值为false,表示击键事件只送到当前有输入焦点的组件上。
5.Menu属性用来指定窗体的主菜单。
6.Visible属性用来确定窗体是否可见。
此外还有一些运行时态属性,这些属性只有在程序运行的时候才能通过编程访问。
这种属性主要有:Active属性用来确定窗体是否获得输入焦点。
ActiveMDIChild这个函数将返回当前活动的子窗体。
DropTarget属性用来指定窗体是否是拖放操作的对象。
Parent属性用来设定包含窗体的窗口控件,通常是另一个窗体。
如果窗体没有包含它的控件,那么它的Parent属性为nil。
2)问:Windows窗体有很多样式,比如对话框,弹出窗口。
如果我要控制窗体的边界样式,应该怎么办?答:属性BorderStyle可以指定窗体边界的外观和行为。
它一共有六种可能的取值。
bsDialog表示大小不可变的标准的对话框边界。
C++Builder是Embarcadero公司开发的一款集成开发环境,主要用于快速开发Windows应用程序和跨评台移动应用程序。
C++Builder 内置了丰富的组件库和强大的图形用户界面设计器,使得开发者可以快速构建界面友好、功能强大的应用程序。
在C++Builder中,表格输入是一种常见的数据输入方式。
通过表格输入,用户可以方便地输入和编辑大量的数据,例如数据库中的表格数据。
本文将介绍C++Builder中表格输入的原理和实现方法。
1. 表格输入控件在C++Builder中,表格输入通常使用TStringGrid控件来实现。
TStringGrid是一个二维的表格控件,可以显示和编辑多行多列的文本。
开发者可以通过TStringGrid来创建一个类似Excel表格的界面,用户可以在其中进行数据的输入和编辑。
2. 数据绑定在进行表格输入时,通常需要将表格与数据源进行绑定,以便将用户输入的数据保存到数据库中,或者从数据库中加载数据到表格中进行显示和编辑。
在C++Builder中,可以使用TDataSource和TDBGrid 组件来实现数据源和表格的绑定。
通过TDataSource和TDBGrid,开发者可以实现数据的双向绑定,即用户在表格中输入的数据会自动同步到数据源中,而数据源中的数据也会自动在表格中更新显示。
3. 事件处理在表格输入过程中,可能需要对用户的输入进行一些处理,例如数据校验、输入提示等。
C++Builder提供了丰富的事件处理机制,开发者可以通过事件处理函数来实现这些功能。
可以通过OnValidate事件来实现数据校验,通过OnEdit事件来实现输入提示等功能。
4. 自定义表格输入除了使用TStringGrid和TDBGrid控件进行表格输入外,开发者还可以通过自定义控件来实现更灵活的表格输入界面。
可以使用TListView 或TDrawGrid来实现自定义的表格输入界面,从而满足特定的界面设计需求。
C++ Builder 初学问与答(一)第一部分:基础入门1.窗体1)问:Windows的编程就是在窗体的基础上实现的,C++Builder是怎样处理窗体的呢?答:窗体的一部分功能通过窗体的属性来实现,窗体的属性非常多,这里只对其中比较重要的属性进行介绍。
1.ActiveControl指定窗体上的某个组件为输入焦点。
如下面的语句将窗体上的Label1组件成为输入焦点:ActiveControl=Label1。
在同一时时刻,应用程序只能有一个输入焦点。
2.BorderIcons用来设定标题栏上出现哪些系统图标。
它是一个集合,可以设成以下几个类型:最大化按钮(biMaximize)、最小化按钮(biMinimize)、帮助按钮(biHelp)和系统菜单(biSystemMenu)。
3.Icon属性用来指定当窗体最小化时显示的图标。
4.KeyPreview属性为true时,表示击键事件发生时先传给窗体,然后再传给有输入焦点的组件上,相当于窗体截获了原本属于组件的事件。
缺省值为false,表示击键事件只送到当前有输入焦点的组件上。
5.Menu属性用来指定窗体的主菜单。
6.Visible属性用来确定窗体是否可见。
此外还有一些运行时态属性,这些属性只有在程序运行的时候才能通过编程访问。
这种属性主要有:Active属性用来确定窗体是否获得输入焦点。
ActiveMDIChild这个函数将返回当前活动的子窗体。
DropTarget属性用来指定窗体是否是拖放操作的对象。
Parent属性用来设定包含窗体的窗口控件,通常是另一个窗体。
如果窗体没有包含它的控件,那么它的Parent属性为nil。
2)问:Windows窗体有很多样式,比如对话框,弹出窗口。
如果我要控制窗体的边界样式,应该怎么办?答:属性BorderStyle可以指定窗体边界的外观和行为。
它一共有六种可能的取值。
bsDialog表示大小不可变的标准的对话框边界。
bsSingle表示大小不可变的单线边界。
bsNone表示大小不可变、没有边界。
bsSizeable表示标准的可改变大小的窗体。
bsToolWindow与bsSingle时类似,但是标题较小,用做工具框窗口。
bsSizeToolWin与bsSizeable时相似,但是标题较小,做工具框窗口。
要注意的是,对于MDI子窗体,bsDialog或bsNone将不起作用。
3)问:同样是获得焦点,ActiveControl与SetFocus()有什么不同?答:ActiveControl是把焦点交给组件,它是一个属性。
而SetFocus()是组件主动要焦点,是一个方法。
书写格式也不一样。
例如,我们想使同样的一个Button1获得焦点,可以下的两种写法:ActiveControl=Button1或Button1=SetFocus()二者作用是一样的,不过一般都习惯用第一种方式。
4)问:属性FormStyle有什么作用?答:属性FormStyle可以确定窗体的类型,它一共有四种属性值。
fsNormal表示窗体既不是MDI父窗口也不是MDI子窗口,只可能是单文档SDI窗口或者对话框。
这个属性值是缺省值。
fsMDIChild表示这个窗体是一个MDI子窗口。
fsMDIForm表示这个窗体是一个MDI父窗口。
fsStayOnTop表示窗体始终保持在窗体所属工程中其它窗体的上面,除非还有别的窗体的FormStyle属性也被设置成了fsStayOnTop。
要特别注意的是,在程序运行期间不要修改窗体的FormStyle属性。
5)问:属性Position有什么作用?答:属性Position可以确定程序运行时出现在屏幕上的窗体的大小和位置,它有五种可能的取值。
1.poDesigned表示使用设计时指定的尺寸和位置属性时显示窗体。
尺寸属性是指Height 和Width,位置属性是指Left和Top。
这个属性值是缺省值。
2.poDefault表示窗体在屏幕上显示的位置和大小由Windows决定。
每次运行应用程序时,窗体都会稍微向下向右移动。
3.poDefaultPosOnly表示窗体以设计时的窗体尺寸显示窗体,但是在屏幕上显示的位置由Windows确定。
每次运行应用程序时,窗体都会稍微向下向右移动。
当无法再向下移动时,就又会从屏幕的左上角开始显示。
4.poDefaultSizeOnly表示窗体的位置由设计时指定的值确定,而尺寸由Windows确定。
5.poScreenCenter表示使用设计时指定的尺寸和位置属性,在屏幕的中央显示窗体。
6)问:如何最大化或最小化窗体?答:属性WindowState与窗体的显示有关,它有三种可能的取值。
wsNormal窗体既不是最大化显示也不是最小化显示。
这个值是缺省值。
wsMinimized窗体最小化显示。
wsMaximized窗体最大化显示。
7)问:属性ClientHeight和ClientWidth有什么作用?答:这两个属性用来定义窗体用户区域的高和宽。
所谓用户区域窗体的实际工作区域,就是除了窗体的标题栏、菜单条、工具条和状态条以及边框之外的窗体区域。
所以对于新创建的窗体,它的用户区域比窗体的大小要稍微小一些,相对而言,窗体的大小是由属性Height和Width确定的。
8)问:如何动态创建一个窗体呢?答:我们先创建一个主窗体MainForm,把她的Caption改为“主窗体”,把FormStyle属性改为fsMDIForm。
再创建一个子窗体windows1,把Caption改为“子窗体”,把FormStyle属性改为fsMDIChild。
选择“Project|Options…”菜单项,将会弹出一个如图所示的对话框。
在这里我们可以通过下拉框选择主窗体(Main form),在左侧的Auto-create forms里列出了所有的窗口,这里面的窗口通常是动态创建,你可以把需要动态创建的窗口(Available forms)通过中间的那四个按钮调到右侧,然后OK就可以了。
动态的创建的方法如下:void _fastcall TForm1::Button1Click(TObject *Sender){Tform2 *Forms;try{Form2=new TForm2(Application);//动态创建Form2Form2->ShowModal();delete Form2;//把Form2释放}catch(Exception &exception){delete Form2;Application->ShowException(&exception);}}要注意一般你可能不喜欢用上面的那种形式,而写成如下格式:void _fastcall TForm1::Button1Click(TObject *Sender){Tform2 *Forms;Form2=new TForm2(Application);//动态创建Form2……}你要记住,无论你的子窗体创建是否完成,你都必须运行delete来释放你刚才创建的子窗体,当然你也可以把释放的过程写在OnClose事件函数内,这个函数有一个参数为Action,它有四个取值:caNone为不关闭窗体,什么也不操作;caHide为不关闭窗体,但把它隐藏起来;caFree为关闭窗体,同时释放内存;caMinimize为最小化窗体,不关闭。
所以我们也可以象下面这样来释放子窗体。
void _fastcall TForm2::FormClose(Tobject *Sender,TcloseAction &Action){Action=caFree;}9)问:为什么我们用Close()不能关闭我当前活动的子窗体?答:关闭当前活动窗体,很多人会用如下的方法:void _fastcall TForm1::Button2Click(Tobjcet *Sender){ActiveMDIChild->Close();//注意这是在主窗体(或者说在其它窗体)中来关闭当前活动的子窗体,这样做不好,一般的关闭应该象10)问中那样来做}此时窗体并没有关闭,而是最小化了,因此要在子窗体的OnClose事件中用如下代码来关闭。
void _fastcall TForm2::FormClose(Tobject *Sender,TCloseAction &Action){Action=caFree;}这段程序不用多说了,上面都说过了。
这里有一点要说明一下,就是在调用Close()时,会自动触发OnClose事件,而由上我们知道窗体没有关闭,而是最小化,说明在OnClose中Action的此时的值为caMinimize。
所以我们要写上面的方法来关闭。
10)问:Show()与ShowModal()有什么不同?答:我们的程序中不可能就只有一个Form,比如,有Form1和Form2两个窗口,我们在Form1中调用Form2应该先在Unit1.cpp的开头部分加入:#include “Unit2.h”在要调用的地方加入:Form2->Show();//或是Form2->ShowModal();两者的区别在于若使用了ShowModal()则必须关闭Form2,才能处理其它窗口的内容,而Show()则不用。
当然你可以直接在Form2直接创建一个Button1来关闭她,程序内容如下:void _fastcall TForm2::Button1Click(Tobject *Sender){Close();}在Close前,不需要加上Form2,因为这行程序就是在Form2上运行的,所以默认的父组件就是Form2。
C++ Builder 初学问与答(二)2.文本输入组件11)问:如果要实现文本输入,在C++Builder中应该怎么办?答:C++Builder常用文本输入组件来实现,常用的文本输入组件有Edit、MaskEdit 、Memo 和RichEdit。
他们的主要不同在于Edit和MaskEdit用于输入单行文本,而Memo和RichEdit可以输入多行文本。
此外Label组件也可用来进行文本显示。
Edit和MaskEdit是一个窗口控件,它可以获得输入焦点。
当用户需要输入单行文本时,就应该使用编辑框。
它通常与标签组件一起使用。
12)问:编辑框(Edit)常用的属性有哪几个?答:编辑框常用的几个属性如下:Text属性是一个String类型的数据,它决定了在编辑框中出现的文本字符串。
在编程中,我们经常要通过text属性获取编辑框中的文本字符串MaxLength是一个Integer类型的数据,它指定编辑框所能容纳的最大字符数。