必威电竞|足球世界杯竞猜平台

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應用程序開發工具。它使用了Windows圖形用戶界面的許多先進特性和設計思想,采用了彈性可重復利用的完整的面向對象程序語言(Object-Oriented Language)、當今世界上最快的編譯器、最為領先的數據庫技術。對于廣大的程序開發人員來講,使用Delphi開發應用軟件,無疑會大大地提高編程效率,而且隨著應用的深入,您將會發現編程不再是枯燥無味的工作——Delphi的每一個設計細節,都將帶給您一份欣喜。

Delphi被稱為第四代編程語言,它具有簡單、高效、功能強大的特點。和VC相比,Delphi更簡單、更易于掌握,而在功能上卻絲毫不遜色;和VB相比,Delphi則功能更強大、更實用。可以說Delphi同時兼備了VC功能強大和VB簡單易學的特點。它一直是程序員至愛的編程工具。

語言簡介

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、Windows 95、WindowsNT、Windows XPWindows VistaWindows 7等環境下使用。當前,Delphi 也可以在Linux平臺上開發應用,其在LINUX上的對應產品Kylix。

Delphi 擁有一個可視化的集成開發環境(IDE),采用面向對象的編程語言object pascal和基于部件的開發結構框架。Delphi它提供了500多個可供使用的構件,利用這些部件,開發人員可以快速地構造出應用系統。開發人員也可以根據自己的需要修改部件或用Delphi本身編寫自己的部件。

“真正的程序員用C++,聰明的程序員用Delphi”,這句話是對Delphi最經典、最實在的描述。Delphi被稱為第四代編程語言,它具有簡單、高效、功能強大的特點。和VC相比,Delphi更簡單、更易于掌握,而在功能上卻絲毫不遜色;和VB相比,Delphi則功能更強大、更實用。可以說Delphi同時兼備了VC功能強大和VB簡單易學的特點。它一直是程序員至愛的編程工具。Delphi具有以下的特性:基于窗體和面向對象的方法,高速的編譯器,強大的數據庫支持,與Windows編程緊密結合,強大而成熟的組件技術。但最重要的還是Object Pascal語言,它才是一切的根本。Object Pascal語言是在Pascal語言的基礎上發展起來的,簡單易學。

Delphi提供了各種開發工具,包括集成環境、圖像編輯(意象 Editor),以及各種開發數據庫的應用程序,如DesktopDataBase Expert等。除此之外,還允許用戶掛接其它的應用程序開發工具,如Borland公司的資源編輯器(資源 Workshop)。

在Delphi眾多的優勢當中,它在數據庫方面的特長顯得尤為突出:適應于多種數據庫結構,從客戶機/服務機模式到多層數據結構模式;高效率的數據庫管理系統和新一代更先進的數據庫引擎;最新的數據分析手段和提供大量的企業組件。

歷史版本

1995 1.0 支持16位Windows開發。基于框架(VCL)的,可拖曳、可視化開發環境

1996 2.0 以32位編譯器為核心,支持C/S數據庫開發

1997 3.0 語法:加入接口(接口)的機制。集成開發環境:首次提供了(Code Insight)

1998 4.0 語法:加入動態數組和方法覆蓋等支持。IDE:增強調試能力,提供代 碼模板

1999 5.0 增強了IDE和調試器,提供了TeamSource。簡化Internet的開發,增強數據庫支持

2001 6.0 提供了Web 送達。跨平臺的Kylix 1.0和CLX

2002 7.0 提供了.NET的過渡,增強的Internet開發(IntraWeb),完善數據庫支持,增加了Indy網路元件和Rave Report資料庫報表,并且支援統一建模語言及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中進行統一建模語言開發;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發布CodeGearradStudio.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麥金塔的應用程序;將會支持Windows 7下的觸摸式編程;強化的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。

(1)直接編譯生成可執行代碼,編譯速度快。由于Delphi編譯器采用了條件編譯和選擇鏈接技術,使用 它生成的執行文件更加精煉,運行速度更快。在處理速度和存取服務器方面,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應用程序的源代碼。當程序中含有不止一個窗口時,會有幾個庫單元的源程序出現在代碼編輯器中。代碼編輯器的標題條中顯示了當前正在編輯的庫單元文件名。要查看某一特定程序的源代碼,只需用鼠標點動寫有該庫單元文件名的頁標簽,就可以對該庫單元進行編輯了。

用戶界面

從空白窗體開始工作。將設計一個簡單的程序:在屏幕上開一個窗口,窗口中有一個圖框,用三個按鈕 來改變圖框的形狀;再用一個圖標按鈕來進行圖框的顏色設置,通過顏色編輯對話框來選擇變成哪一種顏色。在菜單上選用File|New Application菜單項來生成新的工程文件。這時,屏幕上出現窗體。部件(Component)是建立Delphi應用程序的要素。Delphi為用戶提供了豐富的部件庫,既有可視的部件(如編輯框、按鈕)等,也有不可視的部件(如系統定時器、數據表等)。它們按照功能分別排列在Component Panel的各頁上。

移動鼠標到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按鈕),把它放到其它三個按鈕部件的下面。

點動“Dialog”頁標簽,選擇以16色網格做圖標的ColorDialog部件并把它放到窗體的任意位置。因為這一部件是不可視部件,所以它的位置并不影響大局。

部件調整

一般來講,此時放置到窗體的部件是分散排列的,而且其大小不是真正需要的尺寸。除了不可視的 ColorDialog部件外,其它的部件都需要進行位置、大小和顯示字樣的調整。Delphi提供的對齊工具和窗口柵格為這些調整提供了方便。移動部件:只需把鼠標落到想移動的部件上,按住左鍵并移動光標,到合適的位置再釋放左鍵,整個部件即被移到新位置。

調整尺寸:先把鼠標光標移動到要改變尺寸的部件上,單擊左鍵,選中該部件,尺寸調整器會出現,把鼠標移動到其中的一個小黑色方塊上,當鼠標變成拖動方向指示時,按下并拖動鼠標左鍵,可以放大或縮小部件。上下左右的小方塊用來移動對應的各邊,四個角的方塊可以移動相連的兩條邊。如果要精確地表述部件的尺寸,可以在Object Inspector上,改變Left(表示部件左邊緣到窗體左邊框的象素點數)、Top(表示窗體上邊框到部件上邊緣的象素點數)、 Width(部件本身的寬度)、Height(部件本身的高度)等屬性。關于改變部件的屬性,下文還將仔細講解。

使得一組部件對齊:用調整位置的方法可以對齊部件,但操作步驟復雜。Delphi提供的對齊工具可以使多個部件的對齊極為迅速方便。下面來使四個按鈕對齊。先將四個按鈕選為一組:按住并向右下方拖動鼠標左鍵,在窗體上畫出圍繞四個按鈕的矩形,釋放左鍵后,被選中的按鈕周邊會出現暗灰色的邊框。選用Edit|Align命令,或使用彈出式菜單(在被固定的部件上單擊鼠標右鍵激活),可以顯示圖1.4所示的對話框。

要使按鈕沿左邊對齊并使它們在垂直方向上均勻分布,先在Alignment對話框的Horizontal欄內選擇“Left sides”,在“Vertical”欄內選擇“Space equally”,按動OK按鈕,Delphi就會自動將它們對齊。然后,您可以將它們四個作為一組來移動。在四個按鈕以外的窗體上按動鼠標左鍵,就釋放了組中的部件,使它們成為分立的部件。

利用對齊模板來對齊部件也是很方便的。首先要將要對齊的部件選成一組,選擇視圖|Alignment Palette顯示對齊模板。按照所示的方式選擇即可達到對齊的目的。

鎖定部件

如果部件已經對齊,為防止不小心移動部件,可以將部件位置鎖定。選擇主菜單上的Edit|Lock Controls選項,使得部件不能進行移動操作。解鎖只需再次選擇此項即可。

調整“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兩個屬性的部件,雙擊左鍵可以在這兩個值之間切換。

漢化界面及字體

如果您的Windows 95系統中安裝了中文系統,對界面做漢化是極其方便的。例如,您可以將Button1的Caption屬性改成“&R矩形”,同樣地可改變其它部件的屬性,將窗體做成中文的操作界面。

若對中、西文字體不滿意,則可以調整Font屬性以滿足您的要求。Font屬性的前面,有一個小小的“+”號,這說明它表征的是集屬性,也即屬性不再是一個單值,而是一個屬性的集合。雙擊Font,ObjectInspector將在下面擴充顯示它的其它屬性。Color用來表示文本的顏色,人名定義了字體名,如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等等。這會使您在以后的程序開發中受益匪淺。

至此,界面的設計工作就已完成了。運行一下觀察效果,別忘記保存您的庫單元文件、工程文件。

事件處理過程

完成用戶界面,只是建立了一個“BOBBIN”,下面要做的便是給程序加入“靈魂”,也即,使它能夠完成所要求的功能。

顏色編輯對話框

圖標按鈕“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這種先進開發環境的編程語言。

本章中,將討論object pascal的主要特點,并講解如何在事件處理過程和其他應用程序中,使用它來編制程序代碼。本章將講解Delphi應用程序中最常用的ObjectPascal語法,而不是Pascal語言的一切細節。如果您完全不熟悉Pascal編程,請參閱一些基礎的Pascal教程。如果您具有編程經驗,并能熟練地使用其他流行程序語言,您將在本章的ObjectPascal中發現一些相同的概念。如果您已經熟悉了BorlandPascal,就可以快速瀏覽或跳過本章。

編寫object pascal程序代碼

在前邊的章節中,通過例程,已經編寫了幾行簡單的代碼。在本章中,將從熟悉Pascal編程的角度,配合實例,講解ObjectPascal編程的基該方法。

在編寫自己的ObjectPascal程序時,要注意程序的可讀性。Pascal語言是英式結構語言,在程序中選擇合適的縮排、大小寫風格,并在需要時將程序代碼分行,會使得程序代碼能夠很容易地被自己和他人讀懂。一般的程序員都有這樣的體驗:如果不給程序加上適當的注解,一段時間后,自己也難以理清程序的流程。給程序及時地加上注釋是良好的編程習慣。Delphi的注釋需要加注在{}之間,編輯器會把它們處理成為空白。Delphi保留了BorlandPascal編輯器的風格,關鍵字采用黑體字,被注釋的部分會變暗,這使得編程風格良好,易讀易寫。

賦值

在事件處理過程中,最常用到的工作就是把一個新值賦給一個屬性或變量。在設計用戶界面時,可以 使用ObjectInspector(ObjectInspector)來改變其屬性;但有時需要在程序執行時改變屬性的值,而且有些屬性只能在執行時改變,這些屬性在Delphi的在線幫助的“Proprety”主題中被標為執行期屬性。進行這種改變,就必須使用賦值語句。

下文的賦值語句表征一個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)及其他,object pascal在應用標識符時,必須首先說明它們。ObjectPascal是強類型語言,它的編譯器可以檢查確保賦給變量或屬性的值是正確的類型,以便于您改正錯誤。因為ObjectPascal是編譯語言,所以Delphi的執行速度要比使用解釋語言快得多。在使用標識符前說明它們,可以減少程序錯誤并增加代碼的效率。

變量

變量是程序代碼中代表一個內存地址的標識符,而此地址的內存內容在程序代碼執行時可以被改變。在使用變量前必須對它進行說明,即對它進行命名,并說明它的類型。在所有變量說明以前加上保留字var。變量說明左邊是變量的名稱,右邊則是該變量的類型,中間用(:)隔開。

var

Value,Sum:Integer;

Line:String;

在窗體中加入一個名稱為Edit1的編輯框,再加入一個名稱(屬性人名)為Add的按鈕部件,并建立如下的事件處理過程:

procedureTForm1.addClick(Sender:TObject);

var

X,Y:Integer;

begin

X:=100;

Y:=20;

Edit1.文本:=IntToStr(X+Y);

end;

在本例中,當按動ADD按鈕時,編輯框中顯示值120。在object pascal中,必須確保變量或屬性被賦予類型相同或兼容的值。您可以嘗試將賦給X的值改為100.0,或去掉IntToStr函數,在編譯時會出現類型不匹配的錯誤,這也說明了ObjectPascal強類型語言的特點。

條件

case語句適用于被判斷的變量或屬性是整形、字符型、枚舉型或子界型時(LongInt除外)。用case語句進行邏輯跳轉比編寫復雜的if語句容易閱讀,而且程序代碼整形較快。

下面的例程顯示一個使用case語句的窗體:

建立如下的事件處理過程:

procedureTForm1.Button1Click(Sender:TObject);

var

Number:Integer;

begin

Number:=StrToInt(Edit1.文本);

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結尾。

循環

object pascal的循環語句有三種: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.文本:=IntToStr(X+Y);其中,IntToStr(Value)把一個LongInt類型的數值轉化為字符串的值,Value是IntToStr唯一的參數,它可以是一個整形的值、變量、屬性或產生整形值的表達式。調用函數,必須把返回值賦給和此返回值類型兼容的變量或屬性。

有些函數返回一個True或False的布爾量,用戶的程序可以根據返回值來決定跳轉。下文的例程講述了函數返回值為Boolean的判斷用法:

在窗體中加入一個ColorDialog對象和一個人名屬性為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值,窗體將變為紅色。

跳轉語句

object pascal的跳轉語句有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.文本);

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表示第一個變量。您也可以把數組定義成類型:

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;

var

My人名:MyString;

則變量MyName被說明成為最多可以包含15個字符。如果您沒有說明字符串的大小,Delphi會認為字符串包含最大值255個字符。給字符串賦值可以直接使用單引號括起的字串賦值:

MyName:='Frank.Smith';

或MyName:='張明';

因為MyName是一個可以包含15個字符的MyString型變量,上文的兩個的變量都是有效的,一個漢字可以視作兩個字符。當您給字符串型變量賦的值多于定義數值時,例如將MyName賦為‘FrankSmith.Franklin’,則Delphi只會接受前15個字符‘FrankSmith.Fran’。在內存中,字符串通常占用比所說明的大小多一個字節的空間,因為第一個位置是一個包含這個數組大小的字節。您可以使用索引值來訪問字符串的字符,MyName可以得到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.TextinVowelsthen

Lable2.Caption:='是元音';

else

Lable2.Caption:='請再試';

end;

執行這個程序,在編輯框中輸入字母,表達式Edit1.TextinVowels的結果是布爾型的,in是運算符,用來判斷字母是否存在于集合中。輸入的判別結果會顯示在編輯框的下方。以上就用到了集合類型TVowels。

記錄類型

記錄是您的程序可以成組訪問的一群數據的集合。下面的例程說明了一個記錄類型的用法:

type

TEmployee=record

Name:string;

YearHired:1990..2000;

Salsry:Double;

Position:string;

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;

參考資料 >

生活家百科家居網