语句(2)创建StartForm窗体。
语句(3)调用Show()方法显示StartForm窗体,采用的是非模态方式显示StartForm窗体。如果采用ShowModal()模态方式显示StartForm窗体,那么在显示StartFom窗体后程序不再往下执行,不符合启动画面的要求。[Page]
语句(4)调用Update()强制刷新StartForm窗体。如果不用Update()方法,那么只有当生成StartForm窗体的函数体(即WinMain函数)执行完后,才会刷新Sm~Fonn窗体。 语句(5)使应用程序停顿2秒,以便用户可以更好地看请启动画面。对于启动需要较长时间的软件,可以不需要这条语句。
语句(6)的作用是在程序启动后,销毁启动画面。 窗体组件(TForm)的事件
窗体组件最重要的一些事件主要是在窗体创建和关闭时产生的事件。在创建窗体时,将会依次发生下列事件:OnCreate;OnShow;OnActivate;OnPaint。
1.OnCreate事件
在创建窗体时会产生这一事件。主窗体的这一事件经常用于对程序作一些初始化,如分配内存、为一些变量设置初始值等。
2.OnShow事件
窗体显示时(即是窗体的Visible属性被设为True时)会产生这一事件。
3.OnActivate事件
当窗体变为活动窗体时,会产生这一事件。下面的代码表示当窗体Forml为活动窗体时,其标题(Caption)变为“活动窗体”:
VOid fastcall TForml::FormActivate(TObject Sender) {
Caption=”活动窗体”; )
4.OnPaint事件
当窗体重画时发生这一事件,利用OnPaint事件加代码可以进行重画窗体时的特殊处理,例如在窗体尺寸变更时需要重画窗体,就会产生这一事件。
5.OnClick事件
当鼠标在窗体上单击的时候发生该事件。
6.OnClick事件
当鼠标在窗体上单击的时候发生该事件。
7.OnClose事件
当关闭窗体的时候发生该事件,利用在OnClose事件加代码可以进行关闭窗体时的特殊处理。该事件有一个TcloseAction类型的Action参数。
8. OnCloseQuery事件
用OnCloseQuery可以指定窗体关闭的条件。
9.OnDestroy事件
当窗体被删除时发生这一事件,利用在OnDestroy事件加代码可以进行删除窗体时的特殊处理。
10.OnHelp事件
当窗体收到请求帮助时发生这一事件。
11.OnHide事件
当窗体被隐藏时(窗体的Visible属性设置为False时)发生收到请求帮助时发生这一事件。
12.OnResize事件
当窗体改变大小的时候发生这一事件,利用在OnResize事件加代码可以进行改变窗体大小的时候做特殊处理。 C++ Builder新增加的关键字
C++Builder为C++增加了许多关键字,以适应其快速应用开发(RAD)环境。包括两个类范围关键字以及自动Get/Set指令的支持。
1.新的类范围
从前面的介绍,我们知道类中包含二个类成员访问说明,分别是public、private和protected。C++Builder定义了两个新的对类的访问说明,他们是published和automated。
published范围限定词允许C++Builder在设计期间访问组件的属性,这个新的访问限制允许与public相同的访问权限。用_published限制的类成员在运行期间是可用的(就像public类成员一样),而且设计期间也是可用的。这就是为什么在C++Builder对象查看器中可以设 置组件属性的原因。在c++Builder窗体中加入的组件都会自动在published中声明。
新建一个工程,随便在窗体上加入几个组件,然后切换到代码编辑窗口中,在Unitl.cpp中选择快捷菜单中的Open Soruce/Header file命令,切换到Unitl-h文件中,我们可以看到如下所示的类的声明: class TF0rml:public TForm {
_published: TButton *Buttonl; TLabel *Labell TEdit *Editl priVate: public:
_fastcall TForml(TcompcNfent *0wner); }
可以看出,在窗体中加入的组件都在published段中声明。
如果需要向一个窗体加入成员变量或方法,那么应该private或public段中加入,而不应该放在published段。一般情况下,不能手工修改窗体类的published段,所有带声明的组件都会对应于窗体的DFM文件,因此手工修改可能造成两个文件的不匹配。
autometed与public或published具有相同的访问权限,不同之处是,它用于创建类的OLE信息。通常用于创建OLE Automation Servers。当在C++ Builder中建立OLEAutomation Servers时,编译器会为成员函数及属性产生OLE Automation信息,并声明在autometed段中。
2.Get/Set指令
除了数据成员和方法之外,C++Builder中的类还可以包含属性。通过在对象查看器中设置属性值了解属性的含义,其实它还有更为广泛的用途。
属性与类成员,特别是私有成员有着密切的联系。属性提供了一种信息隐藏的机制。属性是通过Get/Set指令来实现的。要访问每个私有类成员,可以编写一个指令去获取(Get)值,另一个指令去设置(Set)值,这就是所谓的Get/Set指令。因为并没有直接访问类的私
有部分,所以这种方法能提供良好的信息掩蔽,而且以后还能随意改变内部的数据形式。可以像一个简单变量一样来访问属性。
3.fastcall
在C++Builder的窗体方法中自动产生fastcall,这是编译器指示方法参数通过寄存器传输,而不是通过堆栈。这是所有窗体类方法所必须的。然而,如果加入自定义的方法也需要遵循这一要求
#pragma package指令
#pragma package指令,这是C++Builder新添的编译预处理指令,它确保各个封装的单元按照它们的依赖关系所确定的顺序初始化。包(package)源文件默认包含这条预编译指令。典型的用法是在用作建立包的.cpp源程序中加,#pragma package。
这个#pragma影响编译单元的初始化顺序,单元按照下述顺序初始化:
·它们之间的使用关系,也就是说,如果单元1依赖单元2,那么单元2必须在单元1之前初始化。 ·连接的顺序。 ·单元内的优先顺序。
对于普通的.obj文件(那些不用来建立单元的),初始化时首先根据优先顺序,然后再是连接顺序。改变.obj的连接顺序也就改变全局对象的构造函数的调用顺序。
C++Builder函数重载
两个以上的函数,取同一个名字,只要使用不同类型的参数或参数个数不同,编译器便知道在什么情况下该调用哪个函数,这被称为函数重载。
为什么要引入函数重载,可以通过一个例子来说明。有三个函数:
·lsubtract() 整数相减。 ·dsubtract() 实数相减。 ·fsubtract() 浮点数相减。
若用C语言来处理,必须给三个函数规定三个不同的函数名。程序员使用这些函数完成两个变量之间的减法时,必须调用合适的函数,也就是说,程序员必须记忆的是三个函数,而不是一个函数。
在面向对象程序设计中,由于它支持重载,所以用C++Builder处理时,虽然给这三个函
数取相同的名字subtract,但它们的参数类型是不同的。当程序员调用此函数时,只需要在其中带入实参,编译器就会根据实参类型来确定到底调用哪个重载函数。因此,记住subtract是将两个参量相减的函数,剩下的则是系统的事情。上述例子可以用下面的程序来实现。 [例1]重载函数的使用。 #include
return x—y; }
int subtract(float x,float y) (
return x—Y; )
//定义两个双精度数相减 int subtract(double x,double y) {
return x—Y; }
void main() {
int i=36,J=10; float xl=4.9,yl=1.5; double x2=675.5,y2=35.7; cout< 在main中的subtract函数的三次调用,实际上是调用三个不同的重载版本,由系统根据传递的不同参数类型来决定调用哪个重载版本。例如,subtract(i,j),因为i,J为整型变量,所以当执行到此处时,系统将调用两个整数相减的重载版本int subtract(int,int)。从上面可有看出,利用重载概念,程序员在调用函数时,书写非常方便。 C++ Builder VCL库函数学习 一.BORLAND C++ BUILDER VCL的内存管理函数 1. AllocMem