窗体和应用程序类表示Form和Application对象,这些类是从TComponent派生而来,它们实际也是组件,单独地把它列举出来,以示与拖到窗体上的控件加以区别。
TApplication类封装了Windows程序的基本操作。TApplication所担负的任务有:管理图标、提供快捷帮助和基本消息处理。每个Delphi应用程序都有一个指向TApplication对象的指针,此指针称为Application,用TApplication类主要执行消息框,管理快捷帮助,为按钮和状态栏设置提示文本。TApplication有点不一样,它的有些属性(Icon,HelpFile和Title)可以通过Project Options对话框的Application页面来进行设置。其继承关系如下:
TForm类
TForm类封装了VCL中的窗体,窗体可用作主窗体、对话框、辅助窗口以及可以想像出的任何其他类型窗口。TForm是VCL中的主要功能类。其继承关系如下:
这组类包含的类非常广泛,可以进一步把它分成一些独立的分类:
标准组件类是那些封装大部分Windows控件的组件,包括TButton,TEdit,TListBox,TMemo,TMainMenu,TScrollBar,TPopupMenu,TCheckBox,TRadioButton,TRadioGroup,TGroupBox,TPanel和TActionList。
这些类的大部分都封装了一个Windows控件,TMainMenu类封装一个应用程序的主菜单,在设计阶段,双击MainMenu组件的图标就会出现Menu Designer。TMainMenu有一些属性,这些属性能控制菜单选项是否变灰,是否被复选,快捷帮助ID,选项提示文本,以及其他的一些内容,每个菜单选项都有一个OnClick事件,因此可以为选中的菜单选项连接一个事件处理程序。
New Term
面板(panel)代表窗体上的一个矩形区域,通常它有它自己的组件,可以把它作为一个单元来处理。
Panel组件是一个包容器组件,因此它包含了其他一些组件,Panel有一些属性,这些属性用来控制面板将用什么类型的边缘,控制面板是否凸起、下凹或平放;还可以控制其便捷的宽度,这些属性的组合可以建立起各种多维面板。其继承关系如下:
这个组件用来增加一些命令,并且使这些命令很容易作用于一个组件或者一组组件,例如,一个应用程序通过用Clipboard组件,就可以在菜单、工具栏和快捷菜单上删除、拷贝和传送选项,如果Clipboard中有数据,那么传送的按钮盒菜单选项就会生效。如果Clipboard中没有数据,那么传送的按钮盒菜单项将无效,当用TActionList组件时,所有的控件(工具栏、按钮盒菜单选项)都可以是有效或者无效。其继承关系如下:
它们也是标准控件,在组件选项板的Additional标签中可以找到这些控件,如下图:
TSpeedButton也是一个具有图像的按钮,但这个按钮不是一个真正的按钮,相反它是一个按钮的图形描述,这就使得可以利用大量的此按钮,但不消耗每个按钮的Windows资源
TImage组件能够在窗体放置图像,可以从磁盘上选择这个图像文件。
TBevel提供了一个更美观的窗体。
TStringGrid和TDrawGrid类提供了一种表示网格信息的方法。
2、Win32自定义控件类
VCL有一种组件类,它们封装了很多Windows32位的自定义控件,这些包括TListView,TTreeView,TTrackBar,TProgressBar,TTabControl,TPageControl,TRichEdit,TImageList,TStatusBar,TAnimate,TDateTimePicker,TToolBar,TCoolBar和一些其他的组件。这里的有些组件较复杂,表示它们的VCL类也同样很复杂,但有一点是可以相信的,那就是应用这些通用控件,VCL可以减轻很多工作负担,在充分理解这些类之前,必须花一些时间去熟悉这些类,在以后的使用过程中我们会详细介绍。
VCL还有一组主数据库组件,不但包括可视化组件,也包括非可视化组件,非可视化数据库组件包括TDateSource,TDatabase,TTable和TQuery。这些类封装了幕后数据库操作。
可视化数据库组件是VCL数据库操作的一部分,用户可以查看这些组件并可以与之交互。例如,TDBGrid组件是用来显示网格中的数据库表,在这种情况下,TDBGrid充当用户与数据库的接口,通过TDBGrid,用户可以查看和编辑数据库表。
TDBNavigator组件提供了一些按钮,用这些按钮用户可以移动数据库表,这个类包括的按钮有下一个记录、前一个记录、第一个记录、最后一个记录、取消编辑、接收编辑和继续编辑等。
另一种数据意识(data-aware)组件类把标准Windows控件与数据库字段紧紧地联系在一起,这些类包括TDBText、TDBEdit、TDBList、TDBImage和其他一些类。
毫无疑问,Windows用通用对话框来处理诸如打开文件、保存文件、选择字体、选择颜色等事情。VCL在各种类型的类中封装了这些通用对话框,这些类时TOpenDialog、TSaveDialog、TOpenPictureDialog、TSavePictureDialog、TFontDialog、TColorDialog、TPrintDialog和TPrintSetupDialog。VCL也为这个组件组中增加了TFindDialog和TReplaceDialog类,这个组件组中所有组件都是非可视化的,它们没有设计阶段可视化接口,当然在运行阶段显示,对话框是可视的。
组件选项面板上的System标签包含了可视化和非可视化组件的混合,TTimer类用来表示Windows系统计时器,它只有一个OnTimer事件,每当计时器启动时,就会调用这个事件,计时器的时间间隔是由Interval属性设置,TTimer是一个非可视化组件。
TMediaPlayer类也包含在这组类中,这个类可以用来处理媒体文件。比如音频、AVI视频和MIDI音频等,媒体不但可以被播放、停止、暂停、定位、而且还有很多其他操作,这个类具有很多属性和事件,这些属性和事件大大简化了Windows Media Control Interface(媒体控制接口MCI)复杂程度。
TPaintBox具有一个空画布,在这个画上可以画出任何喜爱的东西。这个组件有很多潜在的用户。
系统组件组中还包括OLE和动态数据交换DDE类。
不要犯这种错误:只因为标签上的名字便放弃这个组件组。这个组件组包含一些功能强大的组件(Win 3.1标签源自Delphi1中)。其中比较好用的是TTabSet和TNotebook组件。这个组件组还包括一些组件,这些组件能帮助读者创建自己拥有的自定义File Open和File Save对话框,如TFileListBox、TDirectoryListBox、TDriveComboBox和TFilterComboBox。
这个Internet标签中包含了一些用于Internet编程的组件,这些组件包括HTML、FTP、SMTP、POP3和HTTP等组件,它也包含一些通过API进行的一般网络编程组件,这些组件中的绝大部分本来就是VCL组件,起码有一个组件THTML就是ActiveX控件。
Samples标签中包含一些用于理解怎样编写组件的组件,它提供了这些组件的源代码,因此可以看出它们是怎样工作的,样本组件包括TGauge、TColorButton、TSpinButton,TSpinEdit,TDirectoryOutline和TCalendar。
ActiveX标签中包含ActiveX控件,这些控件可用于应用程序,这些控件包括Software FX公司的Chart Ix、Visual Component公司的Visual Speller、以及Bits Per Second公司的Formula One Spreadsheet、Formula One VtChart和Graph控件。
GDI(图形设备接口)类在Windows GUI应用程序中起很大作用,这些类封装了位图、字体、设备描述环境(DCs)、画笔和笔等应用,它可以通过这些GDI对象把图形和文本在窗口上显示出来。GDI类与一个具体的组件没有联系,但很多类都有这些类的属性实例。例如,编辑控件有一个属性叫Font,它是TFont类的实例。
术语设备描述环境(device context)在传统的Windows程序员中是很著名的,但在VCL中此术语用的并不广泛,这是因为VCL在TCanvas类中封装Windows DC,VCL用术语画布(Canvas)来表示Windows设备描述环境。画布提供了可以用来画画的面,它用的方法是MoveTo、LineTo和TextOut,通过用Draw或StretchDraw方法可以再画布上显示位图。画布可以用来在其上画画。
TCanvas类包含了其他类GDI类的实例。例如,当做MoveTo/LineTo工作时,线是用当前画笔画的,Pen属性用来决定当前笔色,Pen属性是TPen类的一个实例。TPen有一些决定画什么类型线的属性,其类型有:线宽、线的格式(实线、虚线、点线等)和画线的模式。
TBrush类代表画笔,画笔是用来为画布操作填补画案,比如像FillRect,Polygon和Ellipse等画布操作,TBrush属性包括Color,Style和Bitmap。Style属性可以为画笔设置阴影线图案。Bitmap属性可以为填充一个位图。
TBitmap类封装了VCL中的位图操作,其属性包括Palette,Height,Width和TransparentColor,其方法包括LoadFromFile,LoadFromResourceID和SaveToFile,其他组件类也可以用TBitmap,除了TCanvas外诸如TImage、TBitBtn和TSpeedButton等都可以用TBitmap,在大量图形应用程序中通常用脱屏位图,这样可以减少闪动,改善图形质量。
TFont类处理字体操作,其属性包括Color,Height和Style。所有显示文本的组件类都有TFont类。
除了这里列出的GDI类以外,还有一些其他类,在以后的Delphi学习过程中,我们将会学习到更多有关这方面的类,并掌握使用它们。
下图显示了GDI类继承关系:
VCL包括很多实用类,这些实用类可以用在应用程序中,实用类可以简化一些Windows编程。例如,TIniFile可以方便地使用Windows配置文件读和写(.INI文件),一般常识是在外面用.INI文件,在内部用Registry注册表,为了使用注册表方便,VCL提供了TRegistry和TRegkeyInfo类。
TStringList类可以表示字符串数组,TStringList类可以被很多类用来存储字符串,例如,TMemo类的Lines属性就是一个TStringList对象,通过用LoadFromFile和SaveToFile方法,TStringList可以保存字符串列表文件,或从文件中加载字符串列表,TStringList也可以用来读写文本文件。
另一个VCL实用类就是TList类,这个类可以建立任何想要的类型对象数组。TList类可以存储指针清单,TList类主要优点就是它提供了一种方法,这种方法可以使数组随着增加和删除对象,动态地扩大或缩小。
VCL还包括一些类,这些类可以用来读写数据流(数据流实际上只是数据块)。TStream,TFileStream,TMemoryStream和TResourceStream类都可以读写数据流,TStream是所有数据流类的基类,当处理磁盘上的文件时就会用到TFileStream类,在内存中处理数据时就要用到TMemoryStream类,从EXEs和DLLs中加载二进制资源时就要用到TResourceStream类,这些类还有更高级的用法,当需要它们提供的这些特别功能时,它们是很有用的。更多这些类的详细信息请大家自己看看Delphi VCL Help。
讨论到这里并没有讨论到所有的VCL类,但这里所涉及到的类在应用程序中用到的可能性很大。