窗體和應用程序類
窗體和應用程序類表示Form和Application對象,這些類是從TComponent派生而來,它們實際也是組件,單獨地把它列舉出來,以示與拖到窗體上的控件加以區別。
1、 TApplication類
TApplication類封裝了Windows程序的基本操作。TApplication所擔負的任務有:管理圖標、提供快捷幫助和基本消息處理。每個Delphi應用程序都有一個指向TApplication對象的指針,此指針稱為Application,用TApplication類主要執行消息框,管理快捷幫助,為按鈕和狀態欄設置提示文本。TApplication有點不一樣,它的有些屬性(Icon,HelpFile和Title)可以通過Project Options對話框的Application頁面來進行設置。其繼承關系如下:
2、TForm類
TForm類封裝了VCL中的窗體,窗體可用作主窗體、對話框、輔助窗口以及可以想像出的任何其他類型窗口。TForm是VCL中的主要功能類。其繼承關系如下:
組件類
這組類包含的類非常廣泛,可以進一步把它分成一些獨立的分類:
1、 標准組件類
標准組件類是那些封裝大部分Windows控件的組件,包括TButton,TEdit,TListBox,TMemo,TMainMenu,TScrollBar,TPopupMenu,TCheckBox,TRadioButton,TRadioGroup,TGroupBox,TPanel和TActionList。
這些類的大部分都封裝了一個Windows控件,TMainMenu類封裝一個應用程序的主菜單,在設計階段,雙擊MainMenu組件的圖標就會出現Menu Designer。TMainMenu有一些屬性,這些屬性能控制菜單選項是否變灰,是否被復選,快捷幫助ID,選項提示文本,以及其他的一些內容,每個菜單選項都有一個OnClick事件,因此可以為選中的菜單選項連接一個事件處理程序。
(1) TPanel組件
New Term
面板(panel)代表窗體上的一個矩形區域,通常它有它自己的組件,可以把它作為一個單元來處理。
Panel組件是一個包容器組件,因此它包含了其他一些組件,Panel有一些屬性,這些屬性用來控制面板將用什么類型的邊緣,控制面板是否凸起、下凹或平放;還可以控制其便捷的寬度,這些屬性的組合可以建立起各種多維面板。其繼承關系如下:
(2) TActionList組件
這個組件用來增加一些命令,並且使這些命令很容易作用於一個組件或者一組組件,例如,一個應用程序通過用Clipboard組件,就可以在菜單、工具欄和快捷菜單上刪除、拷貝和傳送選項,如果Clipboard中有數據,那么傳送的按鈕盒菜單選項就會生效。如果Clipboard中沒有數據,那么傳送的按鈕盒菜單項將無效,當用TActionList組件時,所有的控件(工具欄、按鈕盒菜單選項)都可以是有效或者無效。其繼承關系如下:
(3)Addition標簽上的組件
它們也是標准控件,在組件選項板的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可以減輕很多工作負擔,在充分理解這些類之前,必須花一些時間去熟悉這些類,在以后的使用過程中我們會詳細介紹。
3、數據庫組件類
VCL還有一組主數據庫組件,不但包括可視化組件,也包括非可視化組件,非可視化數據庫組件包括TDateSource,TDatabase,TTable和TQuery。這些類封裝了幕后數據庫操作。
可視化數據庫組件是VCL數據庫操作的一部分,用戶可以查看這些組件並可以與之交互。例如,TDBGrid組件是用來顯示網格中的數據庫表,在這種情況下,TDBGrid充當用戶與數據庫的接口,通過TDBGrid,用戶可以查看和編輯數據庫表。
TDBNavigator組件提供了一些按鈕,用這些按鈕用戶可以移動數據庫表,這個類包括的按鈕有下一個記錄、前一個記錄、第一個記錄、最后一個記錄、取消編輯、接收編輯和繼續編輯等。
另一種數據意識(data-aware)組件類把標准Windows控件與數據庫字段緊緊地聯系在一起,這些類包括TDBText、TDBEdit、TDBList、TDBImage和其他一些類。
4、通用對話類
毫無疑問,Windows用通用對話框來處理諸如打開文件、保存文件、選擇字體、選擇顏色等事情。VCL在各種類型的類中封裝了這些通用對話框,這些類時TOpenDialog、TSaveDialog、TOpenPictureDialog、TSavePictureDialog、TFontDialog、TColorDialog、TPrintDialog和TPrintSetupDialog。VCL也為這個組件組中增加了TFindDialog和TReplaceDialog類,這個組件組中所有組件都是非可視化的,它們沒有設計階段可視化接口,當然在運行階段顯示,對話框是可視的。
5、系統組件類
組件選項面板上的System標簽包含了可視化和非可視化組件的混合,TTimer類用來表示Windows系統計時器,它只有一個OnTimer事件,每當計時器啟動時,就會調用這個事件,計時器的時間間隔是由Interval屬性設置,TTimer是一個非可視化組件。
TMediaPlayer類也包含在這組類中,這個類可以用來處理媒體文件。比如音頻、AVI視頻和MIDI音頻等,媒體不但可以被播放、停止、暫停、定位、而且還有很多其他操作,這個類具有很多屬性和事件,這些屬性和事件大大簡化了Windows Media Control Interface(媒體控制接口MCI)復雜程度。
TPaintBox具有一個空畫布,在這個畫上可以畫出任何喜愛的東西。這個組件有很多潛在的用戶。
系統組件組中還包括OLE和動態數據交換DDE類。
6、Win 3.1組件
不要犯這種錯誤:只因為標簽上的名字便放棄這個組件組。這個組件組包含一些功能強大的組件(Win 3.1標簽源自Delphi1中)。其中比較好用的是TTabSet和TNotebook組件。這個組件組還包括一些組件,這些組件能幫助讀者創建自己擁有的自定義File Open和File Save對話框,如TFileListBox、TDirectoryListBox、TDriveComboBox和TFilterComboBox。
7、Internet組件
這個Internet標簽中包含了一些用於Internet編程的組件,這些組件包括HTML、FTP、SMTP、POP3和HTTP等組件,它也包含一些通過API進行的一般網絡編程組件,這些組件中的絕大部分本來就是VCL組件,起碼有一個組件THTML就是ActiveX控件。
8、樣本組件
Samples標簽中包含一些用於理解怎樣編寫組件的組件,它提供了這些組件的源代碼,因此可以看出它們是怎樣工作的,樣本組件包括TGauge、TColorButton、TSpinButton,TSpinEdit,TDirectoryOutline和TCalendar。
9、ActiveX控件
ActiveX標簽中包含ActiveX控件,這些控件可用於應用程序,這些控件包括Software FX公司的Chart Ix、Visual Component公司的Visual Speller、以及Bits Per Second公司的Formula One Spreadsheet、Formula One VtChart和Graph控件。
10、GDI類
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類繼承關系:
11、實用類(Utility Class)
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類,但這里所涉及到的類在應用程序中用到的可能性很大。