共找到3條詞條名為delphi的結果 展開
- 中希臘地名
- 《哈利波特與被詛咒的孩子》角色
- 應用程序開發工具
delphi
應用程序開發工具
徠Delphi,是Windows平台下著名的快速應用程序開發工具(Rapid Application Development,簡稱RAD)。它的前身,即是DOS時代盛行一時的“BorlandTurbo Pascal”,最早的版本由美國Borland(寶蘭)公司於1995年開發。主創者為Anders Hejlsberg。經過數年的發展,此產品也轉移至Embarcadero公司旗下。Delphi是一個集成開發環境(IDE),使用的核心是由傳統Pascal語言發展而來的Object Pascal,以圖形用戶界面為開發環境,透過IDE、VCL工具與編譯器,配合連結資料庫的功能,構成一個以面向對象程序設計為中心的應用程序開發工具。
由Borland公司推出的Delphi是全新的可視化編程環境,為我們提供了一種方便、快捷的Windows應用程序開發工具。它使用了MicrosoftWindows圖形用戶界面的許多先進特性和設計思想,採用了彈性可重複利用的完整的面向對象程序語言(Object-Oriented Language)、當今世界上最快的編譯器、最為領先的資料庫技術。對於廣大的程序開發人員來講,使用Delphi開發應用軟體,無疑會大大地提高編程效率,而且隨著應用的深入,您將會發現編程不再是枯燥無味的工作——Delphi的每一個設計細節,都將帶給您一份欣喜。
Delphi是美國Borland(寶蘭)公司開發的工作在Windows平台下的開發工具,它的前身是在DOS下的產品Borland Turbo Pascal。從產品名稱上就可以知道,Turbo Pascal使用的是Pascal語言。從Turbo Pascal 5.5版本開始,Borland公司在傳統Pascal的基礎上加入了面向對象的功能。
Delphi是一個集成開發環境(IDE),使用的是由傳統Pascal語言發展而來的Object Pascal語言。它在本質上是一個代碼編輯器而不是一種語言,但是由於Delphi是幾乎是市場上唯一一個使用Pascal語言的產品,因此有的時候Delphi也成為了人們稱呼Object Pascal的代名詞。Borland公司已經把Object Pascal語言改稱為Delphi語言。
Delphi是Borland公司研發的可視化開發工具,可在Windows3.x、Windows95、WindowsNT、WindowsXP、WindowsVista、Windows7等環境下使用。當前,Delphi 也可以在LINUX平台上開發應用,其在LINUX上的對應產品Kylix。
Delphi 擁有一個可視化的集成開發環境(IDE),採用面向對象的編程語言ObjectPascal和基於部件的開發結構框架。Delphi它提供了500多個可供使用的構件,利用這些部件,開發人員可以快速地構造出應用系統。開發人員也可以根據自己的需要修改部件或用Delphi本身編寫自己的部件。
delphi[應用程序開發工具]
Delphi提供了各種開發工具,包括集成環境、圖像編輯(Image Editor),以及各種開發資料庫的應用程序,如DesktopDataBase Expert等。除此之外,還允許用戶掛接其它的應用程序開發工具,如Borland公司的資源編輯器(Resource Workshop)。
在Delphi眾多的優勢當中,它在資料庫方面的特長顯得尤為突出:適應於多種資料庫結構,從客戶機/服務機模式到多層數據結構模式;高效率的資料庫管理系統和新一代更先進的資料庫引擎;最新的數據分析手段和提供大量的企業組件。
1995 1.0 支持16位Windows開發。基於框架(VCL)的,可拖曳、可視化的開發環境
1996 2.0 以32位編譯器為核心,支持C/S資料庫開發
1997 3.0 語法:加入介面(Interface)的機制。IDE:首次提供了(Code Insight)
delphi[應用程序開發工具]
1999 5.0 增強了IDE和調試器,提供了TeamSource。簡化Internet的開發,增強資料庫支持
2001 6.0 提供了Web Service。跨平台的Kylix 1.0和CLX
2002 7.0 提供了.NET的過渡,增強的Internet開發(IntraWeb),完善資料庫支持,增加了Indy網路元件和Rave Report資料庫報表,並且支援UML及XP的程式製作。
2003 8.0 單純的for .NET版本,擁有C#的能力,保留了Delphi的易用性(業內視為一個過渡版本)
2004 9.0 正式名稱:Delphi 2005。語法:加入了inline及for in loop等功能。IDE:把Borland Delphi. Net、Borland Delphi Win32、Borland C#、Enterprise Core Objects等環境和功能集成成一個開發工具,因此可以在Win32和.NET開發環境中切換或同時進行
2005 10.0 發布名稱:Borland Developer Studio(BDS) 2006。集成C++ Builder; ECO(Enterprise Core Objects)升級到ECO III; 集成Together for Delphi,可以在同一個IDE中進行UML開發;QA Audits和QA Metrics可以快速的把握專案的設計和代碼的質量。
2006 Turbo Borland將BDS 2006拆分成幾個獨立的版本(Delphi for win32、Delphi for .net、C#、C++ Builder),而且不能同時安裝兩個不同的版本。由於Borland的IDE生產部份獨立成為一家名為codegear的公司,所以這個版本是以Borland名義推出的最後一個版本。
2007 11.0 正式名稱:CodeGear RAD Studio - Delphi 2007。
2008 5.7 Borland正式宣布將CodeGear子公司出售給Embarcadero(易博龍)技術公司。
2008 8.25 Embarcadero發布CodeGear Delphi 2009 Pre-release版。
2009 8.25 Embarcadero發布CodeGear.RAD.Studio.2010版
2010.8.30 Embarcadero 發布 Delphi XE(又名Delphi 2011,代號為Fulcrum)
2011.1.27 Embarcadero公司宣布成立一個新的精簡版Delphi Starter Edition,是在愛好者和誰得到一個稍微簡化的功能集為一個小的創業公司的價格,旨在可用性。
2011 年 發布Embarcadero RAD Studio XE2,支持跨平台,這項技術被稱為FireMonkey。
2012 年5月 英巴卡迪諾公司正式發布 Delphi XE3。
2013 年4月 發布Delphi XE4 ,ios編程得到完善。
2013 年9月 發布Delphi XE5 ,開始安卓開發。
2014 年3月 發布AppMethod 1.13,專註移動開發。
Anders Hejlsberg,丹麥人,曾在丹麥科技大學學習工程學。Anders Hejlsberg第一次登上軟體界歷史舞台是在80年代早期,因為他為MS-DOS和CP/M設計了一個Pascal編譯器。當時,還是一個小公司的Borland很快僱用了他,並買下了他的編譯器,改稱Turbo Pascal。在Borland,Hejlsberg繼續開發Turbo Pascal,並最終帶領他的小組設計了Turbo Pascal的替代品、開發工具史上的奇迹: Delphi語言。
Delphi發展至今,從Delphi1、Delphi2到Delphi XE3,不斷添加和改進各種特性,功能越來越強大。Delphi5開始添加了對IDE(集成開發環境)的很多改進新特性,擴展了資料庫支持(ADO和InterBase資料庫),帶有Internet支持的MIDAS改進版,TeamSouse版本控制工具,轉換功能,框架概念以及很多的新組件與新特性。
Delphi 6.0是Borland公司推出的一套無論是界面還是功能都近乎完美的應用程序開發工具。與以前的Delphi版本相比,Delphi 6.0使用更簡便,效率也更高。
Delphi 7.0使用更簡便,效率更高,最穩定的一個版本,被稱為開發人員的工具之最,也是Borland產品最頂峰時期,更是風靡全球。
Delphi2010內置的Direct 2D模塊及開發庫,其新加的功能:擁有一個能同時運作於x86和x64的IDE,在此IDE下將會有跨平台編譯器,能夠編譯用於linux和MAC的應用程序;將會支持windows7下的觸摸式編程;強化的DataSnap;將支持雲計算;將支持函數式編程,這需要很多時間,據David估計是2011會實現。
Delphi XE2實現了跨平台通用開發,通過Delphi XE2所帶的FireMonkey平台,Delphi可以開發跨平台應用程序,並原生編譯到Windows和Mac OS X平台。FireMonkey還可以為iPhone、iPod Touch和iPad創建iOS應用,並分發到蘋果公司的應用商店。Delphi的FireMonkey應用程序擁有完全的硬體加速。
Delphi XE3 可以發布不同平台的產品,包括Windows 7和Mac OS,未來還要支持手機版本的Android和IOS。
Delphi界面
(2)支持將存取規則分別交給客戶機或伺服器處理的兩種方案,而且允許開發人員建立一個簡單的部件或部件集合,封裝起所有的規則,並獨立於伺服器和客戶機,所有的數據轉移通過這些部件來完成。這樣,大大減少了對伺服器的請求和網路上的數據傳輸量,提高了應用處理的速度。
(3)提供了許多快速方便的開發方法,使開發人員能用儘可能少的重複性工作完成各種不同的應用。利用項目模板和專家生成器可以很快建立項目的構架,然後根據用戶的實際需要逐步完善。
(4)具有可重用性和可擴展性。開發人員不必再對諸如標籤、按鈕及對話框等Windows的常見部件進行編程。Delphi包含許多可以重複使用的部件,允許用戶控制Windows的開發效果。
(5)具有強大的數據存取功能。它的數據處理工具BDE(BorlandDatabaseEngine)是一個標準的中介軟體層,可以用來處理當前流行的數據格式,如xBase、Paradox等,也可以通過BDE的SQLLink直接與Sybase、SQLServer、Informix、Oracle等大型資料庫連接。Delphi既可用於開發系統軟體,也適合於應用軟體的開發。
(6)擁有強大的網路開發能力,能夠快速的開發B/S應用,它內置的IntraWeb和ExpressWeb使得對於網路的開發效率超過了其他任何的開發工具。
(7)Delphi使用獨特的VCL類庫,使得編寫出的程序顯得條理清晰,VCL是現在最優秀的類庫,它使得Delphi在軟體開發行業處於一個絕對領先的地位。用戶可以按自己的需要,任意的構建、擴充、甚至是刪減VCL,以滿足不同的需要。
(8)從Delphi8開始Delphi也支持.Net框架下程序開發。
當前DELPHI 已經成為一個品牌,而不僅僅是一個開發平台或開發語言的名稱。當前DELPHI產品已經由CodeGear公司繼續發展,該公司是BORLAND公司的全資子公司。當前,CodeGear為廣大開發者提供了DELPHI FOR PHP,以高度可視化的方式全面支持面向對象的PHP網站開發,大大提高了PHP開發網站的代碼復用程度,成為WEB應用開發的新利器。
Delphi的安裝與其它應用軟體並無不同。2.0版必須在Windows 95以上的操作系統中使用。啟動Windows 95或Windows NT后,將Delphi的光碟放入光碟機(CD-ROM)中,運行光碟上的\INSTALL\SETUP.EXE文件,它的安裝程序會提示您正確地裝入Delphi。如果您是在微軟中文Windows環境中安裝Delphi,請參照附錄A來設置您的BDE環境,以便於處理中文數據。
為避免隱藏在Delphi后的Program Manager和曾經運行過的其它程序擾亂版面,分散您的注意力,不妨在啟動Delphi前關掉其它應用程序;啟動Delphi后,再最小化隱藏在後面的Delphi 2.0程序組。這樣屏幕上就只留下Delphi窗口可見了。
首次載入Delphi,屏幕上會出現四個窗口:
標題為“Delphi-Project1”的Delphi主窗口
Object Inspector窗口
標題為“Form1”的窗體(Form)窗口
標題為“Unit1.PAS”的代碼編輯窗口。剛啟動時這一窗口的大部分被“Form1”窗體所掩蓋。將“Form1”窗體移開,或單擊Form1窗體下方的狀態行,可以使其全部可見。在“Form1”窗體的任意可見位置單擊滑鼠,可以恢復主窗體可見。
Delphi的主窗口位於屏幕的上端,包括Menu(菜單)、Speed Bar(加速條)和Component Panel(部件選項板)。Menu是下拉式主菜單。Speed Bar位於主窗口的左下端,由兩排共14個加速按鈕組成。這些按鈕是菜單功能的快捷方式,各種圖標直觀地表示了它能執行的動作。Component Panel由一行、若干頁對象按鈕所組成,利用它來選擇需要的部件並將它放到窗體中去。
Object Inspector窗口含有兩頁:Properties頁顯示窗體中當前被選擇部件的屬性信息,並允許改變對象的屬性;Events頁列出了當前部件可以響應的事件。按動Object Inspector下端的“Events”頁標籤,使得Events頁可見,這一定的事件後邊的空白處,可以定義對象接受到相應事件時執行的動作。首次啟動時,Object Inspector窗口顯示的是當前窗體Form1的屬性。Object Inspector根據對象屬性的多少,決定是否有滾行顯示。移動滾行條,可以查看當前對象的全部屬性。
此外,Object Inspector上還有Object Selector(對象選擇器),位於Object Inspector上方的下拉式菜單中。它顯示了窗體上所有部件的名稱和類型,也包含窗體本身。您可以用Object Selector很容易地在窗體的各個部件之間切換,也可以快速地回到窗體本身。當窗體中含有較多的對象時,您會發現這是切換對象尤其是回到窗體的最快捷途徑。
想使Object Inspector一直可見,可將滑鼠移到Object Inspector上,按動右鍵,以啟動Object Inspector的彈出式菜單,將其設置為Stay On Top。這對初學者常是一個很重要的設置方式。
Forms窗口是開展大部分設計的工作區域。首次啟動Delphi 2.0時顯示的是窗體Form1。可以把部件放 在窗體中,通過移動位置、改變尺寸等操作隨心所欲地安排它們,以此來開發應用程序的用戶界面。您可以把窗體想象成一個可以放置其它部件的容器。窗體上有柵格(Grids),供放置部件時對齊位置用,在程序運行時Grids是不可見的。一個真正的應用程序可能有不止一個窗口,您可以選用不同的窗體進行設計。其它窗體可以是對話框(Dialog Box)、數據錄入框等。
代碼窗口一開始處於窗體窗口之下。因為在Delphi中,設計用戶界面直接在窗體中進行,運行結果和設計樣板完全一致。當部件被放到窗體上時,Delphi會自動生成大部分的用戶界面代碼。您所應做的只是在它為您生成的框架中加入完成所需功能的程序段而已。點動Form1的狀態行使代碼窗口可見。
這個窗口中是代碼編輯器。可以在其中書寫Delphi應用程序的源代碼。當程序中含有不止一個窗口時,會有幾個庫單元的源程序出現在代碼編輯器中。代碼編輯器的標題條中顯示了當前正在編輯的庫單元文件名。要查看某一特定程序的源代碼,只需用滑鼠點動寫有該庫單元文件名的頁標籤,就可以對該庫單元進行編輯了。
Delphi界面
移動滑鼠到Component Panel上,在部件按鈕上“猶豫”一、兩秒鐘,一個黃色小提示框就會彈出,寫有該部件的名稱,稱之為提示(Hint)。在要選擇的部件上單擊左鍵,則該部件按鈕被按下,表示部件已被當前選擇。然後,將滑鼠移動到窗體上,按下左鍵,該部件被放到窗體中。部件的輪廓線上會顯現八個被稱為尺寸調整器(Sizing Handles)的黑色小方塊。它除了供用戶調整尺寸使用之外,還可以表示該對象處於當前編輯狀態。此時,按“Delete”鍵可以將該部件刪除。
在Component Panel上,點動寫有“Additional”的頁標籤,切換到Additional頁,再移動滑鼠,逐個用觀看Hint的辦法查看部件的名稱,找到“Shape”部件(其圖標為圓、方形、三角形三個幾何體),將其放到窗體的左方。再按動“Standard”頁標籤,找到“Button”部件(圖標上畫有OK按鈕)。Delphi允許在添加多個同類型的部件時,不必每次到部件選項板上選取。按住“Shift”鍵,同時在“Button”部件上單擊滑鼠左鍵,這時“Button”部件處於按下狀態,並有藍色邊框,表示已經被選擇固定。依次在窗體右方的三個位置單擊左鍵,則會放置三個相同的Button部件。把滑鼠游標移到部件選項板左側的箭頭圖標處,這是“取消選擇”按鈕,它沒有提示。按動它,會發現“Button”部件按鈕恢復彈起狀態。否則,每次“Form1”上的滑鼠單擊左鍵動作,都會導致增加一個按鈕部件。
再次進入“Additional”部件頁,選擇一個“BitBtn”按鈕(圖標是有綠色對號的OK按鈕),把它放到其它三個按鈕部件的下面。
Delphi XE3 開發集成環境
點動“Dialog”頁標籤,選擇以16色網格做圖標的ColorDialog部件並把它放到窗體的任意位置。因為這一部件是不可視部件,所以它的位置並不影響大局。
Delphi界面
調整尺寸:先把滑鼠游標移動到要改變尺寸的部件上,單擊左鍵,選中該部件,尺寸調整器會出現,把滑鼠移動到其中的一個小黑色方塊上,當滑鼠變成拖動方向指示時,按下並拖動滑鼠左鍵,可以放大或縮小部件。上下左右的小方塊用來移動對應的各邊,四個角的方塊可以移動相連的兩條邊。如果要精確地表述部件的尺寸,可以在Object Inspector上,改變Left(表示部件左邊緣到窗體左邊框的象素點數)、Top(表示窗體上邊框到部件上邊緣的象素點數)、 Width(部件本身的寬度)、Height(部件本身的高度)等屬性。關於改變部件的屬性,下文還將仔細講解。
使得一組部件對齊:用調整位置的方法可以對齊部件,但操作步驟複雜。Delphi提供的對齊工具可以使多個部件的對齊極為迅速方便。下面來使四個按鈕對齊。先將四個按鈕選為一組:按住並向右下方拖動滑鼠左鍵,在窗體上畫出圍繞四個按鈕的矩形,釋放左鍵后,被選中的按鈕周邊會出現暗灰色的邊框。選用Edit|Align命令,或使用彈出式菜單(在被固定的部件上單擊滑鼠右鍵激活),可以顯示圖1.4所示的對話框。
要使按鈕沿左邊對齊並使它們在垂直方向上均勻分佈,先在Alignment對話框的Horizontal欄內選擇“Left sides”,在“Vertical”欄內選擇“Space equally”,按動OK按鈕,Delphi就會自動將它們對齊。然後,您可以將它們四個作為一組來移動。在四個按鈕以外的窗體上按動滑鼠左鍵,就釋放了組中的部件,使它們成為分立的部件。
利用對齊模板來對齊部件也是很方便的。首先要將要對齊的部件選成一組,選擇View|Alignment Palette顯示對齊模板。按照所示的方式選擇即可達到對齊的目的。
Delphi界面
調整“Shape”部件的大小,使之與右邊的按鈕組相匹配。再改變窗體的大小,按住並拖動窗體右下方使之剛好包容窗體上的全部部件。這樣,您的用戶界面就會比較美觀。及時地保存所做的工作至關重要。對設計者來講,有兩個文件需要保存:庫單元文件(以.PAS為後綴)和工程文件(以.DPR為後綴)。從主菜單上選擇File|Save Project As...項,Delphi會顯示標題為“Save Unit1 As”的文件保存對話框,Delphi 2.0 允許用戶更改存儲路徑,您可以在下拉式列表框中選擇。最好將您的文件保存在自己的目錄中。在編輯框中鍵入demoform.pas以保存庫單元文件;然後顯示標題為“Save Project As”的另一個文件保存對話框,鍵入sample.dpr。Delphi保存這兩個文件並返回窗體窗口。不要把庫單元和工程存成一樣的文件名,Delphi要求兩者不同。
第一次保存后,以後可以隨時通過Speed Bar中的“Save All”和“Save file”來保存工程文件和庫單元文件。一般來講,當確認文件的改變后,要同時存儲這兩個文件。
運行工程:操作使您有了一個自己的應用程序界面。在速度條中按動“Run”按鈕(繪有綠色三角圖標),您可以看到,所生成的界面與您設計的界面是完全一致的。
改變對象的屬性:上述的工程雖能夠運行,但它對您的按動按鈕操作是沒有什麼反應的,而且,所有部件上還寫著不需要的字樣。雙擊窗口的關閉按鈕結束運行,回到設計界面。下面,將仔細講述如何在Object Inspector中改變部件的各種屬性。
用Properties頁改變部件的屬性值:首先要改變各種部件的標題。先給窗口命名為“Demo”。按動Object Inspector上端的Object Selector的題條或者其右端的下拉標誌,找到Form1項,並點動左鍵,窗體被選中。在Object Inspector的Properties頁中,找到Caption屬性並用左鍵選中,將其右端的Form1改為Demo,同時,您會發現窗體的標題已經相應地做了改變。
用滑鼠點中窗體中的Shape部件,Object Inspector列出了它的屬性。選中Shape屬性,您會發現右端出現了下拉標誌。點動這一標誌,可以查看對象的Shape屬性可選值。它的形狀可以是矩形、圓形、圓角矩形、方形等幾種。這是設計後續功能的基礎。
選中Button1按鈕,此時Object Inspector已經顯示出此按鈕的一應屬性。將它的Caption屬性改為“&Rectangle”,“&;”號使得Delphi特殊處理它後面的字元,在這裡,按鈕中的R字母被做了下劃線處理,運行時,可以用“Alt-R”來按動這一按鈕。同樣,您可以將其它的兩個按鈕Button2和Button3的Caption屬性改成需要的形狀指示,譬如“&RoundRec”、“&Ellipse”。可以把某個按鈕作為窗口上的預設按鈕,Delphi會為按鈕加上有黑色的邊緣。運行時,回車即相當於被按下。只需將此按鈕的Default屬性從False改成True,即將它設為窗體的預設按鈕。點動Default屬性,在右端的值後面雙擊左鍵,或從下拉菜單中選取True,即可改變這一屬性。Delphi中有許多只有True、False兩個屬性的部件,雙擊左鍵可以在這兩個值之間切換。
漢化界面及字體
如果您的Windows95系統中安裝了中文系統,對界面做漢化是極其方便的。例如,您可以將Button1的Caption屬性改成“&R矩形”,同樣地可改變其它部件的屬性,將窗體做成中文的操作界面。
若對中、西文字體不滿意,則可以調整Font屬性以滿足您的要求。Font屬性的前面,有一個小小的“+”號,這說明它表徵的是集屬性,也即屬性不再是一個單值,而是一個屬性的集合。雙擊Font,ObjectInspector將在下面擴充顯示它的其它屬性。Color用來表示文本的顏色,Name定義了字體名,如System,MsSerif,Arial,宋體,黑體等。Style下又擁有四個屬性:fsBold,fsItalic,fsUnderline和fsTrikeOut。如果想讓字體有其中的某種風格,可把相應的屬性值設成True。
Font對話框可以更為直接地設定以上屬性。Font屬性右側值段有帶省略號的按鈕,單擊它可以激活Font對話框,如圖1.7所示:
這一對話框中包含了上述的全部屬性,使得調整字形更為直接方便。但要申明的是,對於窗體Form來講,Font屬性改變的是窗體中其它部件的顯示字形,它本身的標題字體是預設的System字體,不能通過屬性來改變。
圖形編輯對話框
最後,用圖標按鈕BitBtn1來控制Shape部件的顏色。選中圖標按鈕,將它的Caption屬性改為“&Color”(或“&C顏色”)。可以在按鈕中加入一個圖標來形象地表述它的功能。選用ObjectInspector中的Glyph屬性,點動值段的三點按鈕,彈出圖形編輯對話框。
您可以通過圖形編輯對話框裝入圖標,在本常式中,按動Load按鈕,選擇\Delphi2.0\Images\Buttons\Brush.bmp文件裝入,Bitbtn1就成為一個圖標按鈕。另外,Delphi還為您提供了豐富的Windows標準圖標按鈕。想運用它們,改變BitBtn的Kind屬性。用戶不妨嘗試一下,選擇其它值可以生成漂亮的標準按鈕,如OK,Cancel等等。這會使您在以後的程序開發中受益匪淺。
至此,界面的設計工作就已完成了。運行一下觀察效果,別忘記保存您的庫單元文件、工程文件。
事件處理過程
完成用戶界面,只是建立了一個“骨架”,下面要做的便是給程序加入“靈魂”,也即,使它能夠完成所要求的功能。
顏色編輯對話框
圖標按鈕“Color”要控制部件Shape1的顏色,可以調入顏色編輯對話框,用以選擇要變成的顏色。這時就要用到運行時不可視的部件ColorDialog了。同樣地使圖標按鈕BitBtn1響應OnClick事件,在它的過程中加入以下的語句:
ColorDialog1.Execute;
Shape1.Brush.Color:=ColorDialog1.Color;
這樣,圖標按鈕的功能也就完成了。
初學者可能對這樣的程序段不能理解。其實也是十分簡單的。查看ColorDialog的Brush屬性,就會發現它是個集屬性,在其下還有一個Color選項,正是想改變的屬性。既然想將圖形的顏色變得更加豐富多彩,它本身提供的幾種顏色就已不能滿足要求了。用顏色編輯器可以得到更多的色彩。程序的第一句用Execute方法,使得ColorDialog運行它本身。當用戶在對話框中進行操作,選定了一種顏色時,即使得TColorDialog對象的一個屬性Color置為選定顏色的值。將此值賦給Shape1的Brush屬性的子屬性Color,就將選定的顏色加到了圖形上。
讀者的要求可能會是,怎樣儘快的了解這些這些方法、屬性和域呢?下文對使用聯機幫助的簡單介紹可能會對您有所裨益。
使用聯機幫助
事實上,使用聯機幫助是您全面地了解可用的方法、對象的域、??的常式。較為簡單有效的方法是使用Help中的搜索功能。如果您對一個對象知之甚少,選用主菜單中的Help|HelpTopics項,在彈出的幫助對話框,選用Indexes(“索引”)頁,Delphi2.0會提示您輸入要檢索的主題。以您想用的部件的對象名作為檢索主題詞,可以參閱很多基本的信息。例如,上文的常式中,在編輯框中鍵入對象的名稱TColorDialog,在詞條中就會出現該主題,按動Display按鈕顯示出TColorDialog的幫助信息。查看method,可以找到能應用在CclorDialog1上的方法Execute;仔細閱讀它的功能,上述的編程便不難理解了。Properties中提供了部件的所有屬性,在關鍵屬性KeyProperties前加上了“金鑰匙”,提供了詳盡的說明。在Task中您可以查閱該對象的其它相關主題,還可以參閱Example中的應用常式。
Delphi的編程語言是以Pascal為基礎的。Pascal語言具有可讀性好、編寫容易的特點,這使得它很適 合作為基礎的開發語言。同時,使用編譯器創建的應用程序只生成單個可執行文件(.EXE),正是這種結合,使得Pascal成為Delphi這種先進開發環境的編程語言。
本章中,將討論ObjectPascal的主要特點,並講解如何在事件處理過程和其他應用程序中,使用它來編製程序代碼。本章將講解Delphi應用程序中最常用的ObjectPascal語法,而不是Pascal語言的一切細節。如果您完全不熟悉Pascal編程,請參閱一些基礎的Pascal教程。如果您具有編程經驗,並能熟練地使用其他流行程序語言,您將在本章的ObjectPascal中發現一些相同的概念。如果您已經熟悉了BorlandPascal,就可以快速瀏覽或跳過本章。
編寫ObjectPascal程序代碼
在前邊的章節中,通過常式,已經編寫了幾行簡單的代碼。在本章中,將從熟悉Pascal編程的角度,配合實例,講解ObjectPascal編程的基該方法。
在編寫自己的ObjectPascal程序時,要注意程序的可讀性。Pascal語言是英式結構語言,在程序中選擇合適的縮排、大小寫風格,並在需要時將程序代碼分行,會使得程序代碼能夠很容易地被自己和他人讀懂。一般的程序員都有這樣的體驗:如果不給程序加上適當的註解,一段時間后,自己也難以理清程序的流程。給程序及時地加上註釋是良好的編程習慣。Delphi的註釋需要加註在{}之間,編輯器會把它們處理成為空白。Delphi保留了BorlandPascal編輯器的風格,關鍵字採用黑體字,被註釋的部分會變暗,這使得編程風格良好,易讀易寫。
Delphi界面
下文的賦值語句表徵一個OnClick事件。當按鈕按動后,將編輯框部件Edit1的Color屬性置為clRed:
procedureTForm1.Button1Click(Sender:TObject);
begin
Edit1.Color:=clRed;
end;
當按動按鈕后賦值語句被執行,編輯框變成紅色。
在語句中,部件的名稱在屬性前,中間用“.”表示屬性的所屬關係。這樣就準確地指定了要將clRed值賦給哪一部件的哪一屬性。賦值號為“:=”,不論給屬性還是給變數賦值,都是將右邊的值賦給左邊的屬性或變數。
當將一個屬性值、變數、常量或文本數據賦給屬性或變數時,所賦值的類型和接受此值的屬性或變數的類型應相同或兼容。一個屬性或變數的類型定義了此屬性或變數的可能值集合,也定義了程序代碼可以執行的運算。在前邊的常式中,編輯框部件的Color屬性和clRed的類型都是TColor。可以在在線幫助中找到一個屬性的類型;另外一種方法是在ObjectInspector中選定該屬性值段,並按下F1鍵,則類型將在屬性說明的結尾處列出,例如Color屬性列出下邊的語句:
PropertyColor:TColor;
有些屬性是只讀(ReadOnly)的,它們只能被讀取,不能被改變。請查閱在線幫助,在Delphi中這些只讀屬性都有註解。
標識符的說明與使用
標識符是Delphi應用程序中一些量的名稱,這些量包括變數(var)、常量(const)、類型(type)、過程(procedure)、方法(Method)及其他,ObjectPascal在應用標識符時,必須首先說明它們。ObjectPascal是強類型語言,它的編譯器可以檢查確保賦給變數或屬性的值是正確的類型,以便於您改正錯誤。因為ObjectPascal是編譯語言,所以Delphi的執行速度要比使用解釋語言快得多。在使用標識符前說明它們,可以減少程序錯誤並增加代碼的效率。
變數
變數是程序代碼中代表一個內存地址的標識符,而此地址的內存內容在程序代碼執行時可以被改變。在使用變數前必須對它進行說明,即對它進行命名,並說明它的類型。在所有變數說明以前加上保留字var。變數說明左邊是變數的名稱,右邊則是該變數的類型,中間用(:)隔開。
var
Value,Sum:Integer;
Line:String;
在窗體中加入一個名稱為Edit1的編輯框,再加入一個名稱(屬性Name)為Add的按鈕部件,並建立如下的事件處理過程:
procedureTForm1.addClick(Sender:TObject);
var
X,Y:Integer;
begin
X:=100;
Y:=20;
Edit1.Text:=IntToStr(X+Y);
end;
在本例中,當按動ADD按鈕時,編輯框中顯示值120。在ObjectPascal中,必須確保變數或屬性被賦予類型相同或兼容的值。您可以嘗試將賦給X的值改為100.0,或去掉IntToStr函數,在編譯時會出現類型不匹配的錯誤,這也說明了ObjectPascal強類型語言的特點。
case語句適用於被判斷的變數或屬性是整形、字元型、枚舉型或子界型時(LongInt除外)。用case語句進行邏輯跳轉比編寫複雜的if語句容易閱讀,而且程序代碼整形較快。
下面的常式顯示一個使用case語句的窗體:
建立如下的事件處理過程:
procedureTForm1.Button1Click(Sender:TObject);
var
Number:Integer;
begin
Number:=StrToInt(Edit1.Text);
caseNumberof
1,3,5,7,9:Label2.Caption:='奇數';
0,2,4,6,8:Label2.Caption:='偶數';
10..100:
徠begin
Label2.Caption:='在10到100之間';
Form1.Color:=clBlue;
end;
else
Label2.Caption:='大於100或為負數';
end;
end;
執行程序,當Edit1部件接受到一個值,並按動“OK”按鈕觸發程序后,Number便被賦值為用戶輸入的數值。case語句根據Number的值判斷該執行哪一條語句。象if語句一樣。case語句也有可選擇的else部分。case語句以end結尾。
ObjectPascal的循環語句有三種:repeat、while和for語句。
repeat語句
repeat語句會重複執行一行或一段語句直到某一狀態為真。語句以repeat開始,以until結束,其後跟隨被判斷的布爾表達式。參閱以下的常式:
i:=0;
repeat
i:=i+1;
Writeln(i);
until=10;
當此語句被執行時,窗體的下方會出現1到10的數字。布爾表達式i=10(注意,與其他語言不同的是,“=”是關係運算符,而不能進行賦值操作)直到repeat..until程序段的結尾才會被計算,這意味著repeat語句至少會被執行一次。
while語句和repeat語句的不同之處是,它的布爾表達式在循環的開頭進行判斷。while保留字後面必須跟一個布爾表達式。如果該表達式的結果為真,循環被執行,否則會退出循環,執行while語句後面的程序。
下面的常式達到和上面的repeat常式達到同樣的效果:
i:=0;
whilei0then
test2(A);{經前置說明,調用未執行的過程Test2}
writeln(A);
end;
procedureTest2(varA:Integer);{經前置說明的Test2的執行部分}
begin
A:=Adiv2;
ifA>0rhen
test1(A);{在Test2中調用已執行的過程Test1}
end;
procedureTForm1.Button1Click(Sender:TObject);
begin
Alpha:=15;{給Alpha賦初值}
Test1(Alpha);{第一次調用Test1,遞歸開始}
end;
按鈕的OnClick事件處理過程給Alpha賦初值,並實現先減1再除2的循環遞歸調用,直到Alpha小於0為止。
過程與函數是程序中執行特定工作的模塊化部分。Delphi的運行庫包含許多過程與函數以供您的應用程序調用。您不必了解過程與函數的邏輯,但要知道過程與函數的用途。在對象中說明的過程和函數稱為方法(Method)。所有的事件處理過程都是過程,以保留字procedure開頭。每一個事件處理過程只包含了當這一事件發生時需要執行的程序代碼。在事件處理過程中使用Delphi已經存在的過程與函數,只需在程序代碼中調用它們即可。
與過程一樣,函數的程序代碼也執行特定的工作。它和過程的差別為:函數執行時會返回一個值,而過程則沒有返回值。函數可以用來賦給一個屬性或變數;也可以使用返回值來決定程序的流程。前文中實際上已經接觸過了函數。在講述變數時,曾用到過下面的程序段:Edit1.Text:=IntToStr(X+Y);其中,IntToStr(Value)把一個LongInt類型的數值轉化為字元串的值,Value是IntToStr唯一的參數,它可以是一個整形的值、變數、屬性或產生整形值的表達式。調用函數,必須把返回值賦給和此返回值類型兼容的變數或屬性。
有些函數返回一個True或False的布爾量,用戶的程序可以根據返回值來決定跳轉。下文的常式講述了函數返回值為Boolean的判斷用法:
在窗體中加入一個ColorDialog對象和一個Name屬性為ChangeColor的按鈕。為按鈕的OnClick事件建立事件處理過程如下:
procedureTForm1.ChangeColorClick(Sender:TObject);
begin
if ColorDialog1.Execute then
Form1.Color:=ColorDialog1.Color
else
Form1.Color:=clRed;
end;
此事件處理過程使用一個返回Boolean值的Execute方法。按動按鈕,並在顏色對話框中選擇一個顏色。如果按動OK按鈕,ColorDialog.Execute方法將返回True,則Form1.Color將被賦值為ColorDialog1.Color,窗體顯現您選用的顏色;如果按動顏色對話框的Cancel按鈕,方法將返回False值,窗體將變為紅色。
跳轉語句
ObjectPascal的跳轉語句有if和case兩個。
if語句
if語句會計算一個表達式,並根據計算結果決定程序流程。在上文的常式中,根據ColorDialog.Execute的返回值,決定窗體的背景顏色。if保留字後跟隨一個生成Boolean值True或False的表達式。一般用“=”作為關係運算符,比較產生一個布爾型值。當表達式為True時,執行then后的語句。否則執行else后的代碼,if語句也可以不含else部分,表達式為False時自動跳到下一行程序。
if語句可以嵌套,當使用複合語句表達時,複合語句前後需加上begin…end。else保留字前不能加“;”,而且,編譯器會將else語句視為屬於最靠近的if語句。必要時,須使用begin…end保留字來強迫else部分屬於某一級的if語句。
程序代碼在調用一個過程或函數時,通常用參數傳遞數據到被調用的過程或函數中。最常用的參數有數值參數、變數參數和常量參數三種。由被調用過程或函數定義的參數為形參,而由調用過程或函數指明的參數叫實參。在NoValue函數中,說明函數體中的AnEditBox是形參,而調用時在ifNoValue(Edit1)…中,Edit1是實參。
數值參數在運行過程中只改變其形參的值,不改變其實參的值,即參數的值不能傳遞到過程的外面。試看下面的常式:
procedureCalculate(CalNo:Integer);
begin
CalNo:=CalNo*10;
end;
用以下常式調用Calculate函數:
Number:=StrToInt(Edit1.Text);
Calculate(Number);
Edit2.Text:=IntToStr(Number);
Number接受由編輯框1輸入的數值,經Calculate過程運算。它是一個數值型實參。在進入Calculate函數后,會把Number實參拷貝給形參CalNo,在過程中CalNo增大十倍,但並未傳遞出來,因此Number值並未改變,在編輯框2中顯示仍然是編輯框1中的輸入值。形參和實參佔用不同的內存地址,在過程或函數被調用時,將實參的值複製到形參佔用的內存中。因此出了過程或函數后,形參和實參的數值是不同的,但實參的值並不發生變化。如果您想改變傳入的參數值,就需要使用變數參數,即在被調用程序的參數表中的形參前加上保留字var。例如:procedureCalculate(varCalNo:Integer);
則CalNo並不在內存中佔據一個位置,而是指向實參Number。當一個變參被傳遞時,任何對形參所作的改變會反映到實參中。這是因為兩個參數指向同一個地址。將上一個常式中過程頭的形參CalNo前面加上var,再以同樣的程序調用它,則在第二個編輯框中會顯示計算的結果,把第一個編輯框中的數值放大十倍。這時形參CalNo和實參Number的值都是Nnmber初始值的10倍。
如果當過程或函數執行是要求不改變形參的值,最保險的辦法是使用常量參數。在參數表的參數名稱前加上保留字const可以使一個形參成為常量參數。使用常量參數代替數值參數可以保護您的參數,使您在不想改變參數值時不會意外地將新的值賦給這個參數。
一個枚舉型的說明列出了所有這種類型可以包括的值: type
Tdays=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
可以定義上述枚舉類型的變數:
var
DayOfWeek:TDays;
在枚舉型中,括弧中的每一個值都有一個由說明它的位置決定的整形值。例如Sunday有整形值0,Monday有整形值1等。您可以把DayOfWeek說明為一個整形變數,並將一星期的每一天賦一個整形值以達到相同的效果,但用枚舉型會使得程序可讀性好,編寫容易。當您在枚舉型中列出值時,您同時說明了這個值是一個標識符。例如您的程序中如果已經含有TDays類型且說明了DayOfWeeks變數,則程序中便不能使用Monday變數,因為它已經被說明為標識符了。
子界型是下列這些類型中某範圍內的值:整形、布爾量、字元型或枚舉型。在您想限制一個變數的取值範圍時,子界型是非常有用的。
type
Thours=0..23;
TValidLetter='A'..'F';
TDays=(Sunday,Monday,Tuesday,Wednesday,Thursday,
Friday,Saturday);{枚舉型}
TWorkDay=Monday..Friday;{一個TDays型的子界}
子界型限定了變數的可能取值範圍。當範圍檢查打開時,(在庫單元的Implementation後面有{$R*.DFM}字樣表示範圍檢查打開,否則您可以在Options|Project|ComplierOptions中選擇RangeCheking來打開範圍檢查),如果變數取到子界以外的值,會出現一個範圍檢查錯誤。
數組是某種數據類型的有序組合,其中每一個元素的值由其相對位置來指定,您可以在數組的某個位置上放置數據,並在需要時使用這些數據。下面的類型說明了一個Double型的數組變數:
var
Check:array[1..10]ofDouble;
它表示Check指向一個含有10個Double型元素的數據串列,代表每一個元素的是1到10之間的數字,稱為索引。數組的每一項由數組名稱加上[]中的索引來表示。Check包含10個變數,Check[1]表示第一個變數。您也可以把數組定義成類型:
type
TCheck=array[1..10]ofDouble;
則變數說明改為:
var
Check:TCheck;
您可以通過給數組賦值等方法來使用數組。下面的語句將0.0賦給Check數組中的所有元素:
forJ:=1to10do
Check[J]:=0.0;,
數組也可以是多維的,下面的類型定義了一個20行、20列的數組。
type
Ttable=array[1..20,1..20]ofDouble;
var
table1:TTable;
,;,;想將這一表格的所有數據初始化為0.0,您可以使用for循環:
var
Col,Row:Integer;
…
forCol:=1to20do
forRow:=1to20do
Table1[Col,Row]:=0.0;
字元串類型事實上是一個一維的字元數組。當您說明一個字元串型的變數時,您應當指明這個字元串的大小,下面是說明字元串類型的例子:
type
MyString:string[15];
var
MyName:MyString;
則變數MyName被說明成為最多可以包含15個字元。如果您沒有說明字元串的大小,Delphi會認為字元串包含最大值255個字元。給字元串賦值可以直接使用單引號括起的字串賦值:
MyName:='Frank.Smith';
或MyName:='張明';
因為MyName是一個可以包含15個字元的MyString型變數,上文的兩個的變數都是有效的,一個漢字可以視作兩個字元。當您給字元串型變數賦的值多於定義數值時,例如將MyName賦為‘FrankSmith.Franklin’,則Delphi只會接受前15個字元‘FrankSmith.Fran’。在內存中,字元串通常佔用比所說明的大小多一個位元組的空間,因為第一個位置是一個包含這個數組大小的位元組。您可以使用索引值來訪問字元串的字元,MyName[1]可以得到MyName的第一個字元'F'。
可以使用Delphi豐富的運算符、過程和函數來處理字元串型的變數和屬性。下面介紹幾個常用的運算符和Delphi過程或函數:
Concat和(+)功能相同,都可以將多個字元串組合在一起,建立一個較大的字元串;Copy會返回一個字元串中的子字元串;Delete在一個字元串中從一個指定位置起刪除一定數目的字元;Insert在一個字元串中插入一個字元串;Length返回字元串的長度;Pos返回一個子字元串在一個字元串中的位置,即索引值。
集合類型是一群相同類型元素的組合,這些類型必須是有限類型如整形、布爾型、字元型、枚舉型和子界型。在檢查一個值是否屬於一個特定集合時,集合類型非常有用。下面的常式可以說明集合類型的用法:在窗體上加入一個編輯框和一個按鈕,清除編輯框中的文字,在其上加上Caption為“輸入母音”的標籤Label,並在編輯框的下方加入一個空的標籤,將按鈕的Default屬性改為True,建立按鈕的事件處理過程如下:
procedureTForm1.Button1Click(Sender:TObject);
type
Tvowels=setofChar;
var
Vowels:TVowels;
begin
Vowels:=['a','e','i','o','u'];
ifEdit1.Text[1]inVowelsthen
Lable2.Caption:='是母音';
else
Lable2.Caption:='請再試';
end;
執行這個程序,在編輯框中輸入字母,表達式Edit1.Text[1]inVowels的結果是布爾型的,in是運算符,用來判斷字母是否存在於集合中。輸入的判別結果會顯示在編輯框的下方。以上就用到了集合類型TVowels。
記錄是您的程序可以成組訪問的一群數據的集合。下面的常式說明了一個記錄類型的用法:
type
TEmployee=record
Name:string[20];
YearHired:1990..2000;
Salsry:Double;
Position:string[20];
end;
記錄包含可以保存數據的域,每一個域有一個數據類型。上文的記錄TEmployee類型就含有四個域。您可以用以下的方式說明記錄型的變數:
var
NewEmployee,PromotedEmployee:TEmployee;
用如下的方法可以訪問記錄的單域:
NewEmployee.Salary:=1000;
編寫如下的語句可以給整個記錄賦值:
withPromotedEmployeedo
beginsfu nb
Name:='';
YearHired:=1993;
Salary:=2000.00
Position:='editor';
end;
您的程序可以將記錄當成單一實體來操作:
PromptEmployee:=NewEmployee;
以上介紹了用戶常用的自定義類型。在Delphi的編程中,對象是非常重要的用戶自定義數據類型。象記錄一樣,對象是結構化的數據類型,它包含數據的域(Field),也包含作為方法的過程和函數。在Delphi中,當您向窗體中加入一個部件,也就是向窗體對象中加入了一個域;每一個部件也是對象,每當您建立一個事件處理過程使得部件可以響應一個事件時,您即自動地在窗體中加入了一個方法。
Delphi可對Windows操作系統的註冊表、存儲設備和文件系統進行方便的訪問。
內置單元Registry.pas中提供了TRegistry、TRegIniFile、TRegistryIniFile三個封裝類,提供了常用的註冊表、配置文件操作功能。
Classes.pas單元中,由TStream派生的THandleStream、TFileStream、TMemoryStream、TStringStream、TResourceStream,提供了涵蓋文件流、內存流、字元序列流和資源流的讀寫操作,可方便地對文件以及中間交換的序列化數據進行處理。而TStreamAdapter以介面形式提供了更為高級的流與流之間的相互操作。
Delphi是基於面向對象編程的先進開發環境。面向對象的程序設計(OOP)是結構化語言的自然延伸。OOP的先進編程方法,會產生一個清晰而又容易擴展及維護的程序。一旦您為您的程序建立了一個對象,您和其他的程序員可以在其他的程序中使用這個對象,完全不必重新編製繁複的代碼。對象的重複使用可以大大地節省開發時間,切實地提高您和其他人的工作效率。
什麼是對象
一個對象是一個數據類型。對象就象記錄一樣,是一種數據結構。按最簡單的理解,可以將對象理解成一個記錄。但實際上,對象是一種定義不確切的術語,它常用來定義抽象的事務,是構成應用程序的項目,其內涵遠比記錄要豐富。在本書中,對象可被理解為可視化部件如按鈕、標籤、表等。了解對象,最關鍵的是掌握對象的特性。一個對象,其最突出的特徵有三個:封裝性、繼承性、多態性。
對象的封裝性
對對象最基本的理解是把數據和代碼組合在同一個結構中,這就是對象的封裝特性。將對象的數據域封閉在對象的內部,使得外部程序必需而且只能使用正確的方法才能對要讀寫的數據域進行訪問。封裝性意味著數據和代碼一起出現在同一結構中,如果需要的話,可以在數據周圍砌上“圍牆”,只有用對象類的方法才能在“圍牆”上打開缺口。
對象的繼承性
繼承性的含義直接而且顯然。它是指把一個新的對象定義成為已存在對象的後代;新對象繼承了舊類的一切東西。在往新對象中添加任何新內容以前,父類的每一個欄位和方法都已存在於子類中,父類是創建子類的基石。
對象的多態性
多態性是在對象體系中把設想和實現分開的手段。如果說繼承性是系統的布局手段,多態性就是其功能實現的方法。多態性意味著某種概括的動作可以由特定的方式來實現,這取決於執行該動作的對象。多態性允許以類似的方式處理類體系中類似的對象。根據特定的任務,一個應用程序被分解成許多對象,多態性把高級設計處理的設想如新對象的創建、對象在屏幕上的重顯、程序運行的其它抽象描述等,留給知道該如何完美的處理它們的對象去實現。
對象範圍
一個對象的範圍決定了它的數據域、屬性值、方法的活動範圍和訪問範圍。在一個對象的說明部分說明的數據域、屬性值、方法都只是在這個對象的範圍中,而且只有這個對象和它的後代才能擁有它們。雖然這些方法的實際程序代碼可能是在這個對象之外的程序庫單元中,但這些方法仍然在這個對象的範圍內,因為它們是在這個對象的說明部分中說明的。
當您在一個對象的事件處理過程中編寫程序代碼來訪問這個對象的屬性值、方法或域時,您不需要在這些標識符之前加上這個對象變數的名稱。例如,如果您在一個新窗體上加入一個按鈕和一個編輯框,並為這個按鈕編寫OnClick事件處理過程:
procedureTForm1.Button1Click(Sender:Tobject);
begin
Color:=clFuchsia;
Edit1.Color:=clLime;
end;
其中的第一行語句是為整個窗體Form1著色。可以編寫如下:
Form1.Color:=clFuchsia;
如果Edit1是在其他窗體中,那麼您需要在編輯框之前加上這個窗體對象的名稱了。例如,如果Edit1是在Form2之中,那它是Form2說明的一個數據域,並位於Form2的範圍中,那麼您需要將第二句改為:
Form2.Edit1.Color:=clLime;
而且需要把Unit2加入Unit1的uses子句中。
前面的TForm1類型是很簡單的,因為它只含有域Button1和方法Button1Click。但是在這個窗體上,您可以改變窗體的大小、加入或刪除窗體的最大最小化按鈕,或設置這個窗體為MDI界面。對於一個只包含一個域和方法的對象來講,您並沒有看到顯式的支持程序。在窗體上單擊滑鼠或用ObjectInspector的上端的ObjectSelector選中Form1對象,按動F1查閱它的在線幫助,您會在Properties和Method中找到它的繼承到的全部屬性和方法。這些是在TForm類型中說明的,TForm1是TForm的子類,直接繼承了它所有的域、方法、屬性和事件。例如窗體的顏色屬性Color就是在TForm中說明的。當您在工程中加入一個新窗體時,就等於加入了一個基本模型。通過不斷地在窗體中加入部件,您就自行定義了一個新的窗體。要自定義任何對象,您都將從已經存在的對象中繼承域和方法,建立一個該種對象的子類。例如對象TForm1就被說明為對象TForm的子類,擁有一個窗體部件的基本屬性或方法。只有當您在窗體中加入了部件或編寫了事件處理過程時,Form1才成為您自己的類型。
一個比較特殊的對象是從一個範圍較廣或較一般的對象中繼承下來的,它是這個特別對象的祖先,這個對象則稱為祖先的後代。一個對象只能有一個直接的祖先,但是它可以有許多後代。TForm是TForm1類型的祖先,所有的窗體對象都是TForm的後代。
用F1查閱窗體的在線幫助時,您會發現TForm被稱為component(部件)。這是因為所有的部件都是對象。
在這個結構中所有的部件都是對象。部件類型TComponent從TObject類型中繼承數據和程序代碼,並具有額外的可以用作特殊用途的屬性、方法、事件,所以部件可以直接和用戶打交道,記錄它的狀態並存貯到文件中等等。控制類型TControl從TComponent中繼承而來,又增加了新的功能,如它可以顯示一個對象。在上圖中,雖然TCheckBox不是直接由TObject繼承來的,但是它仍然有任何對象所擁有的屬性,因為在VCL結構中,TCheckBox終究還是從TObject中繼承了所有功能的特殊對象,但它還有些自行定義的獨到的功能,如可以選擇記錄狀態等。
根據伺服器上的DB資料庫,在本地創建一個臨時的表,這樣可以提高用戶對數據的訪問效率,同時也減輕了資料庫的訪問壓力。
創建臨時表*.DB
procedure TfUserInfo.createWork;
begin
with tblUserInfo do //頁面上的Table控制項名字
begin
Active := False;
DatabaseName := 'Userwork';
TableName := 'W_USERINFO.DB'; //要創建的臨時表的名字
TableType := ttParadox;
with FieldDefs do //遍歷頁面(數據為DB Table)中的列,作為臨時表的列
begin
Clear;
Add('UserID' , ftString, 6, False); //設置臨時表的列、類型、長度
Add('UserName' , ftString, 20, False);
end;
CreateTable; //創建臨時表
end;
tblUserInfo.Close;
tblUserInfo.Open;
while not dbUserMSSQL.ADOQueryUser.Eof do //為臨時表填充數據
begin
tblUserInfo.Append;
tblUserInfo.FieldByName('UserID').AsString :=
dbUserMSSQL.ADOQueryUser.FieldByName('UserID').AsString;
tblUserInfo.FieldByName('UserName').AsString :=
dbUserMSSQL.ADOQueryUser.FieldByName('UserName').AsString;
tblUserInfo.Post;
dbUserMSSQL.ADOQueryUser.Next;
end;
tblUserInfo.First;
end;