690 likes | 914 Views
数据库系统及应用. 第 10 章 Delphi7 集成开发环境. 江西财经大学信息管理学院 2007. 10.1 Delphi7.0的新产品功能 10.2 可视化开发环境简介 10.3 编程环境设置 10.4 常用组件 10.5 一个简单的Delphi程序 本章小结. 10.1 Delphi 7.0 的新产品功能. Delphi 是美国 Borland( 宝兰 ) 公司开发推出的前端应用程序开发工具。基于 Pascal 语言,具有语法严谨、结构清晰、可读性强和代码执行效率高等特性,且简单易学。
E N D
数据库系统及应用 第 10 章 Delphi7集成开发环境 江西财经大学信息管理学院 2007
10.1 Delphi7.0的新产品功能 • 10.2 可视化开发环境简介 • 10.3 编程环境设置 • 10.4 常用组件 • 10.5 一个简单的Delphi程序 • 本章小结
10.1 Delphi 7.0的新产品功能 • Delphi是美国Borland(宝兰)公司开发推出的前端应用程序开发工具。基于Pascal语言,具有语法严谨、结构清晰、可读性强和代码执行效率高等特性,且简单易学。 • 2002年8月6日,宝兰公司正式推出Delphi7 Studio,全面支持.NET平台的应用开发,完全支持所有重要的新兴行业标准XML、SOAP、WSDL 和XSL。 • Delphi 7.0的新产品功能主要包括以下几个方面: • (1) 企业级的MDA应用开发 • 从根本上减少所需的编程代码量和时间,加速应用开发进程。 • (2) 可视化的快速Web开发 • 直接利用Delphi7集成开发环境进行可视化地创建WEB应用程序。 • Delphi7在组件栏中设置了IW Standard、IW Data、IW Client Site和IW Control 四个控件组来实现WEB应用程序开发。
10.1 Delphi 7.0的新产品功能 • (3) 对Linux平台的支持 • Kylix 3是第一个在Linux平台上的可视化集成开发环境,适合在Linux平台上快速创建数据库应用、CGI应用、WEB应用和WEB服务应用。 • Delphi7用户可以为Windows和Linux构建单一应用程序。在Windows平台中使用CLX组件库和可视化设计器来构建可移植性的Windows程序,只要将基于CLX组件库的源程序在Linux平台上重新编译即可。同样地,在Linux平台上构建基于CLX组件库的源程序在Windows平台上重新编译即可以得到Windows应用程序。 • (4) DataSnap组件为用户提供了构建多层体系结构的应用系统 • 该组件使得客户能够建立支持Web Service的高性能中间件,使得任何客户端应用程序或服务都能通过行业标准Web Services和XML、DCOM或CORBA,与任何主流数据库(如Oracle、MS-SQL Server、Informix、IBM DB2、Sybase和InterBase)建立连接。
10.1 Delphi 7.0的新产品功能 • (5) 方便的企业级的报表生成能力 • Delphi7可以创建跨平台的报表,新增的Rave控件组替代了以往版本的QReport控件组,可以帮助用户轻松制作企业级的报表。 • (6) Windows XP应用 • Delphi7包含了对Windows XP风格的支持,开发者可以创建Windows XP用户界面的应用程序。 • (7) 强化DbExpress的功能 • DbExpress是一组存取各种不同数据库的驱动程序,该组驱动程序和组件是以跨平台为基础开发的,因此Delphi和Kylix都可以使用这组驱动程序和组件。 • 目前DbExpress支持的数据库有:Access、DB2、Oracle、Sybase、SQL-Server2000、MYSQL、Informix、Foxpro、Paradox、InterBase等。 • Delphi7共有四种版本:架构版、企业版 Enterprise、专业版Professional和个人版Personal。这四种版本的开发环境是一样的,只是他们所提供的工具不同。
10.2 可视化开发环境简介 • 可视化开发环境通常分为三个组成部分:编辑器、调试器和窗体设计器。 • 当用户在窗体设计器中工作时,Delphi在后台自动为正在窗体中操纵的组件生成代码。用户可以自己在编辑器中加入代码来定义应用程序的行为,同时还可以在同一个编辑器中通过设置断点和监控点等来调试程序。 • 启动Delphi7后,将出现如图所示的集成开发环境的界面。
10.2 可视化开发环境简介 • Delphi7集成开发环境的界面包括标题栏、主菜单、工具栏、组件栏和一些窗口。其操作界面位于集成开发环境的最上面,具体如图所示 • 标题栏显示了当前的工程名,位于最上部。 • 通过主菜单可以实现集成开发环境中的绝大部分命令。在界面的不同位置点击鼠标右键,在弹出的菜单中实现相应的功能或快捷操作。
10.2 可视化开发环境简介 • 10.2.1 对象编辑器 • 10.2.2 工程管理器 • 10.2.3 代码编辑器 • 10.2.4 对象浏览器
10.2.1 对象编辑器 • 对象编辑器是编辑组件的属性,并为组件设置事件响应处理程序。按快捷键F11或使用菜单View/Object Inspector可以激活该窗口。 • 对象编辑器中包含两个部件: • ①顶部的下拉列表框,该框包含当前窗体上放置的所有组件。框中显示的组件就是当前正在编辑的组件; • ②多页组件,它显示当前组件的属性和事件。当打开组合框从中选取其它的组件时,多页组件中的属性页和事件也会相应地改变。对象编辑器如图所示。
10.2.1 对象编辑器 • 多页组件分为两页: • ①属性页Properties:列出窗体中当前组件的属性(如组件的尺寸、字体等)。 • 属性页在显示属性时分成两列,左边一列是属性标题,叫做属性的Caption列。右边一列是属性的值叫做属性的Value列。 • ②事件页Events:是当前组件可以响应的事件(例如单击事件、拖曳事件等),事件页中也分为两列,左边一列是事件的标题,右边一列是事件的处理过程。缺省情况下,事件的处理过程为空。
10.2.2 工程管理器 • 工程管理器(Project Manager)管理工程中的各类文件的增加、删除和打开。使用菜单View/Project Manager激活窗口,窗口如图所示。 • 通过工程管理器可以了解工程的构成,文件的名称和文件所在的路径。单击“New”按钮创建新的程序单元(如窗体)。单击“Remove”按钮从工程管理器中删除文件。
10.2.3 代码编辑器 • 代码(Code)编辑器窗口可建立事件的处理并编写相关代码。编写程序时,注意窗口的标题栏所显示的被编辑文件名称。
10.2.3 代码编辑器 • 代码窗口的左边是代码浏览器。在编写代码时,Delphi7提供了对象成员自动感知功能,如下图所示。
10.2.3 代码编辑器 • 自动显示与类有关的变量和成员函数,只要用户输入“.”符号后,由Delphi自动完成变量和成员函数的检索。 • 在代码窗口输入函数或过程名的左括号“(”后,Delphi7将自动显示函数或过程的参数名和类型,如图所示。
10.2.4 对象浏览器 • 对象浏览器显示了工程中所有的对象和它们之间的从属关系,如图所示。按快捷键Shift+Alt+F11或使用菜单View/Object TreeView可以激活该窗口。
10.3 编程环境设置 • 在开发的过程中,可以将开发环境优化。通过主菜单的Tools/Environment Options...命令可以打开Environment Options对话框,如图所示,对Delphi集成开发环境进行设置。
10.3 编程环境设置 • (1) Preferences • 选中Autosave options/Editor files 选项,当执行Run/Run 、Run/Trace Into 、Run /Step Over 、Run/Run To Cursor 等命令或退出Delphi时,会自动保存代码编辑器中所有改动过的文件。 • 选中Autosave options/Project Desktop 选项,自动保存桌面信息,并且当Delphi运行时会自动打开上次关闭Delphi时打开的工程。 • 选中Compiling and Running/Show compiler progress 选项,在编译过程中显示编译的进度和相关的信息。 • (2) Library • 在Library标签中可以对一些路径进行设置。如库文件的路径默认设置为:$(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports;$(DELPHI)\Projects\Bpl • 其中,$(DELPHI)表示Delphi安装的目录,如D:\Borland\Delphi7 • 如果有多个路径,可以使用分号隔开。
10.3 编程环境设置 • (3) 编辑环境设置 • 通过主菜单的Tools|Editor Options...命令可以打开Editor Properties 对话框,对Delphi的编辑环境进行设置,如设置代码的字体等。 • (4) 工程设置 • 通过菜单命令Project/Options...可以打开Project Options 对话框,对当前打开的工程或将来新创建的有关工程进行设置。 • 在Forms标签中可以对当前工程的窗体进行设置。如可以在Main form 项中设置主窗体。 • 如果希望程序一运行就创建某个窗体,则可以将该窗体的名称设置在Auto-create forms 项中。否则,将其移动到右边的Available forms项中。 • 在Application标签中可以指定工程的名称、帮助文件名和应用程序的图标等。 • 在Version Info标签中可以控制工程的版本信息。
10.4 常用组件 • 10.4.1 组件 • 10.4.2 窗体 • 10.4.3 文本类组件 • 10.4.4 按钮类组件 • 10.4.5 列表类组件 • 10.4.6 表格类组件 • 10.4.7 分组组件 • 10.4.8 菜单组件 • 10.4.9 工具栏和状态栏
10.4.1 组件 • 组件对应的类为TComponent,所有组件都是由该类派生来的。 • 在Delphi中,运行期间出现在窗体和对话框中的组件称为可视组件,对应TControl子类。 • 在窗体中,可以放置一些运行期间非可视的组件。这些不可视组件实现一些特殊的功能。如时钟控制、对数据库的操作等功能。 • 可视组件分为两类:窗体组件和图形组件。 • 窗体组件对应TWinControl子类,具有窗体句柄,可作为输入焦点并含有其它组件,例如TEdit组件; • 图形组件对应TGraphicControl子类,没有窗体句柄,不可作为输入焦点,也不能含有其它组件,例如Label组件。组件组的关系如图所示。
10.4.1 组件 • 所有组件都是TComponent类派生的一个对象。窗体类(TForm)也是从TComponent类派生的。 • 有些组件具有窗体的“容器”属性,称为容器组件。如在TPanel组件中可以放置TEdit组件。 • Delphi中所有组件在可视组件库(Visual Component Library,缩写为VCL)中封装。可视组件库不仅封装了所有组件对应的类,还封装了一些通用的类。所有的这些类都是由一个基类派生出来的它就是TObject类。
10.4.2 窗体 • 主要属性: • (1) BorderIcons属性 • 指定窗体标题栏上的图标,可以设置为下列数值: • ①biSystemMenu 通过点击标题栏左边的图标或在标题栏上单击鼠标右键显示控制菜单。 ②biMinimize 在标题栏右边显示最小化按钮。 ③biMaximize 在标题栏右边显示最大化按钮。 ④biHelp 在标题栏右边显示帮助按钮。 • 只有窗体的BorderStyle属性设置为bsDialog或者窗体属性BorderIcons中不包括biMinimize和biMaximize时,biHelp设置才有效。
10.4.2 窗体 • (2) BorderStyle属性 • 设置窗体的外观和边框,可以指定为下面的数值: • ①bsDialog 窗体为标准的对话框,边框大小不可以改变。 ②bsNone 窗体没有边框,也没有标题栏,边界的大小不可以改变。 ③bsSingle 窗体具有单线边框,大小不可以改变。 ④bsSizeable 边框大小可变的标准窗体。 ⑤bsSizeToolWin 风格与bsSizeable相同,只是标题栏比较小。对于这种风格的窗体,属性BorderIcons中设置的biMinimize和biMaximze不起作用。 ⑥bsToolWindow风格与bsSingle相同,只是标题栏比较小。另外,对于这种风格的窗体,属性BorderIcons中设置的biMinimize和biMaximize不起作用。 • (3) Caption属性 • 指定窗体标题栏中的说明文字。
10.4.2 窗体 • (4) Font属性 • 设置窗体中文字的字体、颜色和字号等。为了保持窗体风格的一致性,一般不要单个地对窗体中的组件进行Font属性的设置。 • (5) FormStyle属性 • 指定窗体的类型。Windows环境中的应用程序可以分为三类: • ①单文档界面(SDI):程序运行时同时只能打开一个文档。 ②多文档界面(MDI):可以同时打开多个文档,一般这种应用程序具有一个父窗体和多个子窗体。 ③对话框:应用程序的主界面基于一个对话框类型的窗体。 • 属性FormStyle可以分别实现上面所说的各种类型的界面,取值如下: • ①fsNormal 普通类型的窗体,一般单文档界面采用该值。 ②fsMDIChild MDI应用程序中的子窗体。 ③fsMDIForm MDI应用程序中的父窗体。 ④fsStayOnTop 在桌面最前端显示的窗体。
10.4.2 窗体 • (6) Icon属性 • 指定标题栏中显示的图标。设置方法: • 单击对象编辑器Icon属性右边的省略号按钮,在弹出的Picture Editor对话框中点击Load...按钮,就可以装入一个制作好的图标。 • Form1.Icon.LoadFromFile('Icon1.ICO'); • 其中Icon1.ICO是要在窗体Form1标题栏中显示的图标文件名。 • (7) Name属性 • 标识工程中的窗体。通常,在设计阶段确定窗体的名称,不要在程序运行期间通过代码修改Name属性。
10.4.2 窗体 • (8) Position属性 • 描述窗体的大小和显示的位置。可以是下列数值之一: • ①poDesigned 窗体显示的位置和大小与设计期间的一致。 ②poDefault 窗体每次显示时,与上次比较,往右下角移动了一些位置。 ③poDefaultPosOnly 窗体以设计期间的大小显示,窗体显示的位置较上次向右下角移动了一些。 ④poDefaultSizeOnly 窗体以设计期间的位置显示,窗体的大小由Windows决定。 ⑤poScreenCenter 窗体以设计期间的大小显示,显示的位置总在屏幕的中间。 ⑥poDesktopCenter 窗体以设计期间的大小显示;显示的位置总在屏幕的中间。 • (9) WindowsState属性 • 描述窗体显示的状态,可以取下面的三个数值之一: • ①wsNormal 窗体以普通状态显示(既不是最大化状态,也不是最小化状态)。 ②wsMinimized 窗体以最小化状态显示。 ③wsMaximized 窗体以最大化状态显示。
10.4.3 文本类组件 • (1) TEdit组件 • 显示、编辑单独的一行文本。使用TEdit组件的时候应注意: • ①AutoSelect属性可以设置当Edit组件获得输入焦点时,是否自动选中所有的文本。 ②PasswordChar属性可以将用户输入的所有字符以同一个字符显示。 • Edit组件最常用的事件(也是默认事件)为OnChange,即当Edit组件中的文本发生改变的时候,该事件的处理过程被执行。 • (2) TMemo组件 • 显示、编辑多行文本。在使用TMemo组件的过程中应注意: • ①可以通过Text属性来存取文本内容。 ②可以通过Modified属性来确定文本内容是否发生了改变。 ③Memo组件没有从TCustomEdit类继承AutoSelect属性,不可以使用该属性。
10.4.3 文本类组件 • (3) TMaskEdit组件 • 显示、编辑具有指定格式的文本。如6位数字的邮政编码、固定格式的电话号码等。 • (4) TLabel组件 • 显示一个只读的字符串。在使用TLabel组件的时候应注意: • ①通过设置Caption属性,可以改变TLabel组件显示的内容。 ②TLabel组件的Transparent属性设置为True,则显示的字符串不会挡住后面的组件。如将TLabel组件放在一个Image组件上,如图所示。
10.4.3 文本类组件 (5) TstaticText组件 显示只读文本,类似于TLabel组件。
10.4.4 按钮类组件 • 按钮组件相关类的层次结构图
10.4.4 按钮类组件 • (1) TButton组件 • 普通按钮组件。 • (2) TBitBtn组件 • 图形按钮组件。注意: • ①只能使用.bmp文件,设计阶段通过Glyph属性将图形显示在位图按钮上。 • Delphi有一组默认图形,通过Kind属性设置。取值有bkCustom、bkOK、bkCancel、bkHelp、bkYes、bkNo、bkClose、bkAbort、bkRetry、bkIgnore和bkAll等。若使用自己制做的位图,Kind属性要设置为bkCustom。 • ②NumGlyphs指明位图按钮使用图形的个数,为1~4之间的一个整数。如果Kind属性不为bkCustom,NumGlyphs自动设置为2。对于自己制作的图形,如果只有一个位图,将NumGlyphs的值设置为1,如果设置为2,在按钮上只显示一半的图形。 • ③位图按钮具有多个图形的时候,通常显示的是第1个图形;当按钮被按下后,显示第3个图形;当按钮失效后(Enabled属性为False),显示第2个图形。 • ④位图按钮包含几个图形,可以自己设定。Delphi自动将指定的图形在水平方向上进行等分,并在不同的情况下显示不同的图形。在自己制作图形时,可以将同一个位图按钮的几个图形并排放在一起。
10.4.4 按钮类组件 • (3) TSpeedButton组件 • 为加速按钮组件,在加速按钮上可以同时显示图形和文字。 • (4) TCheckBox组件组件 • 复选按钮组件,可以组成多项选择。注意: • ①通过Alignment属性设置复选按钮上文字的位置。 • ②可以在设计阶段设置复选按钮的状态。通过Checked属性将复选按钮设置为“选中”和“未选中”状态。 • ③在同一个窗体中,尽量将不同的复选按钮分组使用,将具有相同性质的复选按钮放在一起。
10.4.4 按钮类组件 • (5) TRadioButton组件 • 单选按钮组件。使用单选按钮时,总是将其进行分组,有两种方法: • ①利用分组框组件(TGroupBox)和单选按钮组件(TRadioButton)实现。首先向窗体中添加分组框,然后向分组框中添加单选按钮。这样,同一个分组框中的单选按钮就自动成为一组。可以通过TRadioButton组件的Checked属性来确定哪一个单选按钮被选中。 • ②利用单选按钮分组框(TRadioGroup)实现。通过ItemIndex属性确定选中哪一个单选按钮。
10.4.5 列表类组件 • 列表组件相关类的层次结构图
10.4.5 列表类组件 • (1) TListBox组件 • TListBox组件显示一系列字符串,注意: • ①设计阶段在Items属性中预先设置列表框的内容,运行期间通过代码改变列表框的内容。运行期间改变内容的命令有: • 向列表框中增加条目:ListBox1.Items.Add('增加的新条目') 删除当前选中的一个条目:ListBox1.Items.Delete(ListBox1.ItemIndex) • ItemIndex是列表框中被选中条目的序号,序号从0开始编号。 清除所有的条目:ListBox1.Clear • ②将TListBox组件的MultiSelect属性设置为True,可以一次选中多个条目。 • ③将TListBox组件的Sorted属性设置为True,自动排序。
10.4.5 列表类组件 • (2) TComboBox组件 • 下拉列表框组件,由一个编辑框和一个下拉式列表框组成。 • 属性DropDownCount改变列表框显示条目的个数,默认值为8。 • (3) TTreeView组件 • 显示具有树型层次的数据。注意: • ① 树可以在设计阶段进行。单击Items属性右面的省略号按钮,弹出下图:
10.4.5 列表类组件 • ②在运行期间,可以动态地改变树的内容。通过Items属性的Add、AddChild、Delete函数等实现。 • ③一般在树的每个条目前会有一个小图标。当该条目被选中时,会显示另一个小图标。这些小图标由ImageList组件( Win 32组件夹的第3个组件)进行统一管理,在TTreeView组件的Images属性中选择一个ImageList组件,具体设置每个条目的ImageIndex属性就可以选择ImageList组件中相应的图标了。 • ④通常要编写TTreeView组件的OnChange事件的处理过程,即在树上选择了不同的条目后,执行该事件的处理过程。 • (4) TImageList组件 • 对位图进行管理的不可视组件。主要用来对窗体中的图标进行管理,统一分配索引号,然后提供给TTreeView组件等。 • 通常将Masked属性设置为True,这样,图标中的背景框就不显示出来。
10.4.5 列表类组件 • (5) TCheckListBox组件 • 复选按钮列表框组件,通过Items属性,在设计阶段添加、修改列表内容。在运行期间,通过下面的代码对列表内容进行修改: • ①增加一个新的复选列表条目。CheckListBox1.Items.Add('新的复选列表条目'); • ②在索引号为0的复选列表条目前的方框中显示一个勾号。CheckListBox1.Checked[0]:=True; • ③判断索引号为1的复选列表条目是否被选中,也就是该条目被高亮度显示。if (CheckListBox1.Selected[1]) then ShowMessage('条目1 被选中。') ; • (6) TDateTimePicker组件 • 实现日期或者事件的快速输入。注意: • ①如果Kind属性设置为dtkDate,则输入的是日期;如果Kind属性设置为dtkTime,则输入的是时间。 • ②在选择日期的情况下,DateFormat属性可以设置日期的格式,有两种格式:dtLong (长日期型)和dtShort(短日期型)。
10.4.6 表格类组件 • 表格组件相关类的层次结构如图
10.4.6 表格类组件 • (1) TStringGrid组件 • TStringGrid组件以表格的形式显示一系列字符串,注意: • ①改变TStringGrid组件的ColCount、RowCount属性来获得行数和列数。在运行期间可以动态地改变这两个属性值。 • ②通过Cells[Column,Row]属性可以获得行数为Column,列数为Row的单元的内容,也可以为其赋值。 • (2) TDBGrid组件 • 显示数据库中的数据集合。TDBGrid组件的用法将在数据库部分进行介绍。
10.4.7 分组组件 • 分组组件相关类的层次结构图
10.4.7 分组组件 • (1) TGroupBox组件: • 分组框组件。可将几个组件放在一个TGroupBox组件中。 • (2) TRadioGroup组件: • 单选按钮分组框组件。 • 通过Items属性预先设定单选按钮。Columns属性设置分组框中的列数。 • (3) TPanel组件: • 是进行界面设计的一个重要工具。
10.4.7 分组组件 • (4) TPageControl组件: • 分页组件,使用TPageControl注意: • ①在TPageControl单击,在弹出式菜单中选中New Page命令,增加一个新的页面。 • ②单击标签,则选中整个组件,单击页面位置,则选中当前激活页面。 • (5) 容器组件: • TGroupBox、TPanel和TPageControl等组件称为容器组件。使用容器组件注意: • ①应先添加容器组件,然后在选中该容器组件的情况下添加其它组件。 • ②如果将容器组件移动、删除,则其中的组件一起被移动、删除。 • ③容器组件中的组件只能在该容器中显示,超过边框的部分将不显示。 • ④设置Tab键顺序,容器作为一个组件来参加排序。容器中的组件可以独立于容器外的组件进行Tab键顺序排列。
10.4.8 菜单组件 • 菜单分为三种: • 1、只有菜单项名称,直接导致完成某种操作; • 2、菜单项名称后有省略号,选择它将弹出一个对话框,需在对话框中做进一步的工作;3、菜单项名称后有一个右箭头,表示选中它后会弹出一个菜单,形成多级菜单。 • 一般的菜单项具有下面的一些特征: • ①定义一个快捷键,即在说明文字中有一个带有下划线的字符。 • ②如果是常用命令,可在工具栏上创建相应的加速按钮。 • ③定义菜单项时,将功能相近的菜单项放在一起作为一组。以分隔条隔开,将菜单项的Caption属性设置为减号“-”。
10.4.8 菜单组件 • (1) 主菜单: • 标题栏下的就是主菜单栏。使用Standard组件夹中的TMainMenu组件。 • 建立主菜单应注意: • ①添加一个ImageList组件,实现对一些图标的管理。 • ②进行菜单项属性的设置和编写事件处理程序,可以双击菜单组件或通过右键菜单命令打开菜单编辑器。 • ③可以设置菜单的ShortCut属性,为菜单项设置一个热键。 • (2) 弹出式菜单: • 弹出式菜单通过Standard组件夹中的TPopupMenu组件实现,其设计方式同TMainMenu组件。 • 几个组件可以共用一个弹出式菜单,只要将这几个组件的TPopupMenu属性设置成同一个弹出式菜单的名称。 可以在窗体上实现弹出菜单,只要在窗体的TPopupMenu属性中选中弹出式菜单。
10.4.9 工具栏和状态栏 • 工具栏可以通过TToolBar、TCoolBar组件与其它组件的组合来实现。 • (1) TToolBar组件: • 位于Win32组件夹中。添加TToolBar组件后, Align属性默认设置为alTop,宽度会自动适应窗体宽度的改变。 • 选中TToolBar组件后,可以直接向其中添加其它组件。 • 设置Transparent、Flat等属性可以美化界面。 • 也可单击鼠标右键,在弹出式菜单中选择New Button在组件栏上添加一个按钮。 • (2) TCoolBar组件: • 位于Win32组件夹中。添加TCoolBar组件后,Align属性默认设置为alTop,宽度会自动适应窗体宽度的改变。 • 默认下, TCoolBar的高度大于单个工具栏的高度。在一个TCoolBar中可以有多个工具栏,并且可以将一个工具栏拖动到另一个工具栏的后面。 • 设置Bitmap、AutoSize等属性可以美化界面。