版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Delphi簡介
Delphi7.0開發(fā)環(huán)境應(yīng)用程序開發(fā)過程應(yīng)用程序的組成
Delphi概述1.1Delphi簡介
Delphi的發(fā)展歷史;
Delphi的特點(diǎn);
面向?qū)ο缶幊痰幕局R;
Windows編程的基本知識。Delphi是一種方便、快捷的Windows應(yīng)用程序開發(fā)工具,為程序員提供了全新的可視化編程環(huán)境。本節(jié)主要介紹以下幾方面的內(nèi)容:1.1.1Delphi的發(fā)展史
隨著Windows操作系統(tǒng)的推出,為了解決Windows編程存在的問題,Inprise公司(原Borland公司)開發(fā)了可視化的軟件開發(fā)工具——Delphi,至今已經(jīng)歷了七代產(chǎn)品的發(fā)展歷程。Delphi1幾乎與Windows95同時(shí)發(fā)行。Delphi1可以看做是 TurboPascal的Windows版,它為使用Pascal語言的用戶提供了 一個(gè)可視化的編程環(huán)境。但仍然屬于16位的開發(fā)環(huán)境。
Delphi2支持32位編程,并且增加了數(shù)據(jù)模塊等多種高效的數(shù)據(jù)重 用功能。
Delphi3
改進(jìn)了集成開發(fā)環(huán)境,對組件庫進(jìn)行了許多增強(qiáng),完全支持 ActiveX控件及其創(chuàng)建,它是一個(gè)比較成熟的版本,受 到了廣泛好評,大大鞏固Delphi作為Windows應(yīng)用程序開發(fā)工 具的地位。
Delphi4、Delphi5、Delphi6不斷改進(jìn)以前版本的不足,增加新的功能, 對開發(fā)環(huán)境也不斷改進(jìn)和完善,特別是不斷增加新組件,以適于 網(wǎng)絡(luò)開發(fā)的需要。
Delphi7又在以前的基礎(chǔ)上進(jìn)行了加強(qiáng),是目前的最新版本。1.1.2Delphi的特點(diǎn)
“真正的程序員用C,聰明的程序員用Delphi?!边@句話是對Delphi最經(jīng)典、最恰當(dāng)?shù)拿枋?。Delphi具有簡單、高效、功能強(qiáng)大的特點(diǎn)。和VisualC++相比,Delphi更簡單、更易于掌握,而在功能上卻毫不遜色;和VisualBasic相比,Delphi功能更加強(qiáng)大,更加實(shí)用。同時(shí)具備了VisualC++功能強(qiáng)大和VisualBasic簡單易學(xué)的特點(diǎn)。最先進(jìn)的編程思想:面向?qū)ο蟮某绦蛟O(shè)計(jì),簡稱為OOPDelphi提供了大量的可視化組件,可視化編程功能強(qiáng)Delphi采用了最為領(lǐng)先的數(shù)據(jù)庫技術(shù)
主要特點(diǎn):1.1.3用Delphi進(jìn)行Windows程序設(shè)計(jì)的基本概念Delphi的編程思想與以前傳統(tǒng)的面向過程的編程思想有很大的不同,而在Windows操作系統(tǒng)下的程序設(shè)計(jì)又與DOS下的程序設(shè)計(jì)有很大的不同程序設(shè)計(jì)語言的發(fā)展面向?qū)ο蟪绦蛟O(shè)計(jì)方法的基本概念Windows程序設(shè)計(jì)基本知識
Delphi可視化編程基本知識主要有以下內(nèi)容:1.1.4Delphi7.0新特性
按照Inprise慣例,Delphi每年都會推出一個(gè)新版本。Delphi7.0是目前最高版本,進(jìn)一步提高了自身性能和操作性。
Delphi7.0在以下幾個(gè)方面進(jìn)行了加強(qiáng)
:集成開發(fā)環(huán)境方面
Web方面數(shù)據(jù)庫方面可視組件庫及運(yùn)行庫方面
1.2Delphi7.0的開發(fā)環(huán)境Delphi7.0的集成開發(fā)環(huán)境IDE是用于進(jìn)行設(shè)計(jì)、運(yùn)行和測試程序的工作系統(tǒng)。Delphi7.0運(yùn)行后可以見到它的開發(fā)環(huán)境如圖1-1所示代碼編輯器窗口窗體設(shè)計(jì)器窗口組件板快捷按鈕欄對象樹形圖對象監(jiān)視器窗口
主要包括以下幾個(gè)窗口:主窗口;對象樹形圖、對象監(jiān)視器窗口;窗體設(shè)計(jì)器窗口、代碼編輯器窗口。(圖1-1Delphi7.0開發(fā)環(huán)境)1.2.1Delphi7.0主窗口Delphi7.0的主窗口位于屏幕的上端,包括Menu(菜單)、快捷按鈕欄和ComponentPanel(組件板)。Delphi7.0的主窗口如圖1-2所示。(圖1-2)主窗口各部分的詳細(xì)說明請參見本教程(P7~P9)1.2.2對象樹形圖及對象監(jiān)視器窗口
對象樹形圖窗口(ObjectTreeView)用樹形表方式列出了項(xiàng)目中所有的對象,即窗口、組件、菜單等,并清楚地表明了它們之間的關(guān)系。對象樹形窗口如圖1-4所示。
在對象樹形圖窗口下方是對象監(jiān)視器窗口(ObjectInspector),對象監(jiān)視器窗口含有兩個(gè)頁卡:屬性頁卡(Properties),顯示窗體中當(dāng)前被選擇部件的屬性信息,并允許改變對象的屬性;事件頁卡(Events),列出了當(dāng)前部件可以響應(yīng)的事件。對象監(jiān)視器窗口如圖1-5所示。
圖1-4對象樹形圖窗
圖1-5對象監(jiān)視器窗1.2.3窗體設(shè)計(jì)器及代碼編輯器(1)
窗體設(shè)計(jì)器用于設(shè)計(jì)程序時(shí)用到的窗體外觀。窗體界面外觀設(shè)計(jì)可在組件板中選擇適當(dāng)?shù)慕M件,并將它設(shè)置在窗體中。其后的工作主要是設(shè)置窗體及組件的屬性。窗體設(shè)計(jì)器窗口如圖1-6所示。Forms窗口是開展大部分設(shè)計(jì)的工作區(qū)域。首次啟動Delphi時(shí)顯示的是窗體Form1??梢园岩恍┙M件放在窗體中,通過移動位置、改變尺寸等操作隨心所欲地安排它們,以此來開發(fā)應(yīng)用程序的用戶界面。對象樹形圖窗口與對象觀察器窗口、窗體設(shè)計(jì)器窗口同步,即在此三個(gè)工具的任何一個(gè)中改變焦點(diǎn)時(shí),另外兩個(gè)工具的焦點(diǎn)也會發(fā)生變化。(圖1-6窗體設(shè)計(jì)器窗口
)1.2.3窗體設(shè)計(jì)器及代碼編輯器(2)
可從對象監(jiān)視器中選擇某事件,雙擊后進(jìn)入代碼編輯器。也可在窗體中直接雙擊某對象進(jìn)入代碼編輯器,通過這種方法進(jìn)入代碼編碼器時(shí),光標(biāo)會自動定位在相應(yīng)的事件處理過程中。
啟動Delphi或執(zhí)行NewForm菜單項(xiàng)時(shí),系統(tǒng)即生成一個(gè)新的窗體,并在代碼編輯器中產(chǎn)生一個(gè)新頁卡,在新頁卡中可以編輯相應(yīng)的單元代碼。按F12可以在窗體設(shè)計(jì)器窗口和代碼編輯器窗口之間轉(zhuǎn)換。
(圖1-7代碼編輯器窗口
)1.2.3窗體設(shè)計(jì)器及代碼編輯器(3)為了減輕編寫代碼的工作量,Delphi7.0除了提供一般的編輯功能外,還提供了以下功能。
(圖1-8代碼完善功能) 1.·代碼完善功能類成員自動提示:在代碼編輯器中輸入某個(gè)類變量及其后的“.”號后,系統(tǒng)會自動列出相應(yīng)的類方法、屬性名稱等,以供程序員選擇設(shè)置,選擇后Enter鍵即可完成輸入。如圖1-8所示。
2.參數(shù)自動提示功能當(dāng)調(diào)用某一種方法時(shí),只要輸入方法名及其后的左括號,系統(tǒng)就會自動提示該方法的參數(shù)類別以及參數(shù)個(gè)數(shù),程序員可根據(jù)這種提示填寫參數(shù),這樣既為程序員提供了方便,又保證了參數(shù)的正確性,如圖1-9所示。(圖1-9參數(shù)自動提示功能)1.2.3窗體設(shè)計(jì)器及代碼編輯器(4)
(圖1-10代碼模板功能
)(圖1-11符號洞察功能)
3.·代碼模板功能用于提供語句模板以幫助代碼的編寫,例如:輸入“if”,按組合鍵Ctrl+J,系統(tǒng)自動彈出有關(guān)“if”語句的代碼模板供程序員選用,如圖1-10所示。
4.符號洞察功能程序員在代碼編輯過程或程序調(diào)試過程中,將鼠標(biāo)置于一個(gè)標(biāo)識符上,稍做停頓系統(tǒng)將自動彈出一個(gè)提示框,提示框中顯示該標(biāo)識符的類型、所屬單元、聲明位置等信息,如圖1-11所示。1.3設(shè)計(jì)第一個(gè)Delphi7.0程序
本節(jié)要創(chuàng)建一個(gè)簡單的應(yīng)用程序。啟動Delphi7.0程序,出現(xiàn)一個(gè)窗口,窗體標(biāo)題欄中顯示“Delphi7.0程序”字樣,在窗體中有一個(gè)“顯示”按鈕,單擊該按鈕顯示一行文字“第一個(gè)Delphi7.0程序”。單擊窗體右上方關(guān)閉按鈕時(shí)退出程序。通過設(shè)計(jì)一個(gè)簡單的應(yīng)用程序。掌握以下內(nèi)容:
應(yīng)用程序開發(fā)過程;
常用開發(fā)工具及功能;
應(yīng)用程序組成;
應(yīng)用程序編譯及執(zhí)行。
在Delphi7.0中開發(fā)的每個(gè)應(yīng)用程序都被稱為工程。Delphi7.0編程首先從創(chuàng)建一個(gè)新工程開始。創(chuàng)建新工程有以下兩種方法:
1.3.1新建應(yīng)用程序工程
新創(chuàng)建的工程中包含一個(gè)默認(rèn)窗體(Form1)和它對應(yīng)的單元(Unit1),根據(jù)工程的需要可添加窗體或單元。工程文件的擴(kuò)展名為.dpr。打開一個(gè)已建立的工程的方法是:單擊File菜單,指向OpenProject,然后選擇工程文件即可。
啟動Delphi7.0進(jìn)入開發(fā)環(huán)境,此時(shí)系統(tǒng)自動生成一個(gè)工程,默認(rèn)名為Project1;選擇File菜單,指向New,然后單擊Application系統(tǒng)將創(chuàng)建一個(gè)新的工程。1.3.2設(shè)計(jì)窗體和組件的屬性(1)
程序設(shè)計(jì)首先是窗體設(shè)計(jì)。因此第一項(xiàng)工作就是在窗體設(shè)計(jì)器完成窗體設(shè)計(jì),在窗體中添加各種所需對象進(jìn)行界面設(shè)計(jì)。將組件板上的組件添加到窗體上有三種方法。(1)單擊組件板上所需組件的按鈕,然后在窗體適當(dāng)位置拖動鼠標(biāo)畫出組件,即可將組件添加到窗體指定位置。(2)雙擊組件板上所需組件的按鈕,即可將組件添加到窗體中心位置。(3)按下Shift鍵不放,單擊組件板上所需組件的按鈕,所選擇組件出現(xiàn)藍(lán)色邊框,同時(shí)對象選擇按鈕彈起??梢栽诖绑w適當(dāng)位置連續(xù)畫出該類組件,用鼠標(biāo)單擊對象選擇按鈕,可以取消該類組件的連續(xù)添加操作。
本程序中要用到兩個(gè)組件,一個(gè)是標(biāo)簽(Label)組件用于顯示文字,另一個(gè)是按鈕(Button)組件用于控制文字的顯示。新建一個(gè)工程,從組件板的Standard頁卡中選擇一個(gè)標(biāo)簽組件和一個(gè)按鈕組件,放置在窗體Form1上,Delphi7.0分別將它們自動命名為Label1,Button1。1.3.2設(shè)計(jì)窗體和組件的屬性(2)
剛添加到窗體中的組件,其邊框上有八個(gè)黑色小方塊,表明它是當(dāng)前被選定的組件??梢杂檬髽?biāo)拖拉邊框上黑色小方塊使組件在相應(yīng)方向上放大或縮小,也可用鼠標(biāo)指向組件內(nèi)部,按下鼠標(biāo)左鍵并拖動鼠標(biāo)到窗體的任意位置。按組合鍵Ctrl+C可以對所選組件進(jìn)行復(fù)制,Ctrl+V可以在窗體中進(jìn)行粘貼,按Delete鍵可以刪除所選組件1.移動組件把鼠標(biāo)移到想移動的組件上,按住左鍵并移動光標(biāo),到合適的位置再釋放左鍵,整個(gè)組件即被移到新位置。2.調(diào)整尺寸把鼠標(biāo)移動到要改變尺寸的組件上,單擊左鍵選中該組件。尺寸調(diào)整器出現(xiàn)后,把鼠標(biāo)移動到其中的一個(gè)小黑色方塊上,當(dāng)鼠標(biāo)變成拖動方向指示時(shí),按下并拖動鼠標(biāo)左鍵,可以放大或縮小組件。上下左右的小方塊用來移動對應(yīng)的各邊,四個(gè)角的方塊可以移動相連的兩條邊。如果要精確地表述部件的尺寸,可以在ObjectInspector上,改變Left(表示部件左邊緣到窗體左邊框的像素點(diǎn)數(shù))、Top(表示窗體上邊框到部件上邊緣的像素點(diǎn)數(shù))、Width(部件本身的寬度)、Height(部件本身的高度)等屬性。1.3.2設(shè)計(jì)窗體和組件的屬性(3)3.組件對齊用調(diào)整位置的方法可以對齊組件,但操作步驟復(fù)雜。Delphi7.0提供的對齊工具可以使多個(gè)組件的對齊極為迅速方便。
按下Shift鍵,用鼠標(biāo)單擊所要選擇的組件,可實(shí)現(xiàn)多重選定;或者用鼠標(biāo)在窗體上拉出一個(gè)矩形,凡是與此矩形相交的組件均被選定。選定多個(gè)組件后可以進(jìn)行所需的對齊操作。被選中的按鈕周邊會出現(xiàn)暗灰色的邊框,選用Edit菜單,單擊Align命令,或單擊鼠標(biāo)右鍵激活彈出式菜單選擇Position指向Align,可以顯示圖1-12所示的對話框。
利用對齊模板來對齊組件也是很方便的,首先將要對齊的組件選成一組,選擇View菜單指向AlignmentPalette顯示對齊模板,如圖1-13所示。按照所示的方式選擇即可達(dá)到對齊的目的。(圖1-13對齊模板
)(圖1-12對齊對話框)1.3.2設(shè)計(jì)窗體和組件的屬性(4) 4.鎖定組件如果部件已經(jīng)對齊,為防止不小心移動組件,可以將部件位置鎖定。選擇Edit菜單,指向LockControls選項(xiàng),使得組件不能進(jìn)行移動操作。解鎖只需再次選擇此項(xiàng)即可。設(shè)計(jì)界面還包括對組件名稱、標(biāo)題、風(fēng)格等屬性的設(shè)置,這些設(shè)置必須在對象觀察器的屬性選項(xiàng)卡中進(jìn)行。本例中要進(jìn)行如下設(shè)置
首先設(shè)置窗體Form1的屬性。單擊窗體的空白區(qū)域,看到對象觀察器的對象下拉列表框中顯示的是“Form1Tform1”。從屬性名中找到標(biāo)題屬性(Caption)一項(xiàng),將其值改為“Delphi程序”。為了使窗體變得美觀合適,更改高度屬性(Height)值為220,寬度屬性(Width)值為350。1.3.2設(shè)計(jì)窗體和組件的屬性(5)
選擇標(biāo)簽Label1,修改其標(biāo)題屬性值為“第一個(gè)Delphi17.0程序”。為了使文字醒目,修改它的字體屬性(Font),單擊字體屬性右邊的按鈕“...”,從彈出的對話框中設(shè)置相應(yīng)的字體,如圖1-14所示,將它字體設(shè)為“楷體_GB2312”,字形設(shè)為“粗體”,大小設(shè)為“一號”,并更改高度屬性(Height)值為35,寬度屬性(Width)值為300。
要實(shí)現(xiàn)剛開始時(shí)文字不可見,在單擊時(shí)顯示文字,本例將標(biāo)簽Label1的可見屬性(Visible)設(shè)為“False”。
設(shè)置按鈕Button1的標(biāo)題屬性為“顯示”。并將顯示按鈕和標(biāo)簽拖動到適當(dāng)位置。
(圖1-14設(shè)置字體)1.3.3編寫事件處理程序
為了使“顯示”按鈕能夠在執(zhí)行時(shí)響應(yīng)鼠標(biāo)的單擊操作,須在按鈕的單擊事件(OnClick)中設(shè)置事件處理程序。程序員沒有必要對所有的事件都編寫事件處理程序,只需對程序所涉及的事件進(jìn)行編寫事件處理程序,本例中要對按鈕的單擊事件編寫事件處理程序。選擇Button1對象,在對象監(jiān)視器中選擇“事件”選項(xiàng)卡,在事件選項(xiàng)卡中選擇OnClick事件,雙擊事件處理欄,Delphi自動生成該事件過程的代碼框架,同時(shí)打開代碼編輯窗口,將光標(biāo)定位在代碼框架過程體的首行處,在過程體中加入如下代碼:
label1.visible:=true; 如圖1-15所示。(圖1-15編寫事件處理程序)輸入完畢可以看到按鈕Button1的鼠標(biāo)單擊事件處理程序的全部內(nèi)容是:procedureTForm1.Button1Click(Sender:TObject);beginLabel1.Visible:=True;end;end.1.3.4保存工程設(shè)計(jì)好的應(yīng)用程序在運(yùn)行前應(yīng)當(dāng)先保存起來,避免文件因發(fā)生意外而丟失。保存文件的方法有:(1)單擊菜單File,SaveAll;(2)單擊工具欄上的SaveAll按鈕;(3)使用快捷鍵Ctrl+Shift+S。
單擊工具欄上的SaveAll按鈕,彈出一個(gè)保存單元文件對話框,在上面的保存目錄下拉框中選擇Sample目錄,文件名默認(rèn)是Unit1.pas,將它改為Main.pas,單擊保存按鈕。接著彈出一個(gè)保存工程文件對話框,文件名默認(rèn)是Project1.dpr,將它改為Sample.dpr,單擊保存按鈕,此時(shí)應(yīng)用工程被保存在Sample目錄下。保存工程時(shí)單元文件名不要和工程文件名相同。作為一個(gè)實(shí)際的應(yīng)用程序,應(yīng)當(dāng)將這些默認(rèn)的文件名更改為更有意義,不易混淆的文件名。當(dāng)項(xiàng)目包含的文件較多時(shí)這一點(diǎn)就顯得更加重要,如果文件名指定不當(dāng)會出現(xiàn)意想不到的麻煩。一般不要在Delphi7.0系統(tǒng)外更改項(xiàng)目所用文件的文件名。打開Sample目錄可以發(fā)現(xiàn)有六個(gè)文件,分別是Main.dfm、Main.pas、Sample.cfg、Sample.dof、Sample.dpr、Sample.res。應(yīng)當(dāng)注意,一個(gè)應(yīng)用程序并不是只由一個(gè)文件組成,而是由許多不同類型的文件組成的。1.3.5編譯執(zhí)行
可選擇Project/Compile菜單項(xiàng)對項(xiàng)目中的文件進(jìn)行編譯。如果語法有錯,則根據(jù)提示的錯誤信息修改后再編譯,直到編譯無錯誤時(shí),選用菜單項(xiàng)中的Run/Run菜單轉(zhuǎn)入運(yùn)行。也可兩步合為一步,直接選用菜單項(xiàng)中的Run/Run菜單(或按F9熱鍵)系統(tǒng)直接進(jìn)行程序的編譯與運(yùn)行。(圖1-16執(zhí)行程序)
程序運(yùn)行結(jié)果如圖1-16所示,當(dāng)出現(xiàn)一個(gè)名為Delphi7.0程序的窗口,單擊窗口上的顯示按鈕,顯示一行文字“第一個(gè)Delphi7.0程序”,單擊窗體右上方關(guān)閉按鈕時(shí)退出程序。在程序中除了語法錯誤,還有可能在程序運(yùn)行中出現(xiàn)錯誤,這就要涉及到程序的調(diào)試。Delphi7.0為程序員提供了方便的程序調(diào)試手段。1.4Delphi7.0程序的組成
在前一節(jié)中,編寫了一個(gè)簡單程序來實(shí)現(xiàn)顯示一個(gè)標(biāo)簽,并把程序儲存在了Sample目錄下,觀察該目錄可以發(fā)現(xiàn),一個(gè)簡單的Delphi7.0程序是由多個(gè)文件組成的。其中包括以下幾種文件。工程文件(.Dpr):Delphi7.0工程文件,用于保存窗體、單元等的信息,以及程序運(yùn)行的初始化代碼等,這種文件實(shí)際上包含了Pascal源代碼。單元文件(.Pas):Pascal文件,用于保存程序源代碼,可以是與窗體有關(guān)的單元或是獨(dú)立的單元。窗體文件(.Dfm):保存窗體或數(shù)據(jù)模塊及其構(gòu)件特性的二進(jìn)制文件。選項(xiàng)文件(.Dof):含有當(dāng)前項(xiàng)目選項(xiàng)設(shè)置的文本文件。配置文件(.Cfg):含有當(dāng)前項(xiàng)目編譯配置的文本文件。資源文件(.res):該二進(jìn)制文件包含項(xiàng)目的圖標(biāo),由Delphi7.0不斷更新和創(chuàng)建,用戶一般不需要修改。備份文件(.~dp,.~df,.~pa):分別對應(yīng)工程、窗體、單元文件的備份文件。1.4.1程序的基本組成(1)
最重要的與程序設(shè)計(jì)緊密相關(guān)的文件有三類:工程文件,窗體文件,單元文件。1.工程文件工程文件擴(kuò)展名為.dpr。是整個(gè)應(yīng)用程序的主程序,有兩項(xiàng)功能:一是說明工程中的單元模塊,二是啟動應(yīng)用程序。工程文件由Delphi7.0自動生成,一般情況下不修改這個(gè)文件。單擊Project選擇ViewSource,可以在代碼編輯器中打開Sample.dpr,進(jìn)行查看和修改。programSample; //保留字program說明這是一個(gè)工程文件
//文件名為sample.dpruses //保留字uses對工程所引用的單元進(jìn)行說明
Forms, //引用Forms單元
mainin'main.pas'{MainForm};//引用main單元,在當(dāng)前目錄的main.pas文件中,相應(yīng)的窗體為MainForm{$R*.res}//系統(tǒng)編譯命令,將擴(kuò)展名為.res的二進(jìn)制資源文件連接到.exe文件中去begin //工程執(zhí)行部分的開始聲明
Application.Initialize;//應(yīng)用程序的初始化
Application.CreateForm(TMainForm,MainForm);//創(chuàng)建窗體MainForm Application.Run; //運(yùn)行程序end. //工程執(zhí)行部分的結(jié)束說明1.4.1程序的基本組成(2)2.窗體文件窗體文件的擴(kuò)展名是.dfm。一個(gè)或多個(gè)窗體文件,它們含有相應(yīng)的單元文件。這些文件包含了窗體上組件的屬性設(shè)置。這樣的文件是用戶在設(shè)計(jì)界面的時(shí)候由Delphi7.0自動生成的,而且不能編輯。在Delphi7.0中,一個(gè)應(yīng)用程序至少需要一個(gè)窗體。用鼠標(biāo)單擊窗體,在快捷菜單選擇Viewastext即可在代碼編輯器中看到以文本形式表示的窗體文件的內(nèi)容,工程Sample中的Mainform窗體文件的文本形式。(代碼省略,詳見本教程P18~P19)3.單元文件單元文件的擴(kuò)展名為.pas,是在代碼編輯器中編寫過的過程代碼文件。在Delphi7.0中每個(gè)窗體都有一個(gè)單元文件與之相對應(yīng),窗體的單元文件包含了程序部分,用以控制窗體的行為。在一個(gè)工程中,還可以建立與窗體無關(guān)的單元文件,用來編寫工程中公用的函數(shù)、過程或定義新的數(shù)據(jù)。許多工程還調(diào)用了Delphi7.0附加庫或其單元文件中的過程或函數(shù)。uses子句中包含的標(biāo)準(zhǔn)單元文件包含了支持可視窗體及其控制的對象聲明。這些單元也包含了用于激活窗體的事件處理過程程序。(代碼省略,詳見本教程P19~P20)1.4.2ObjectPascal的單元(1)
單元是常量、變量、數(shù)據(jù)類型、過程與函數(shù)的集合,而且能夠被多個(gè)應(yīng)用程序所共享。Delphi7.0內(nèi)部包含了多個(gè)程序單元,它們說明了對象、組件、常用過程與函數(shù)以供程序員在設(shè)計(jì)應(yīng)用程序時(shí)使用。例如,當(dāng)在窗體中加入一個(gè)CheckBox組件時(shí),Delphi7.0自動在引用單元說明部分中加入了Stdctrls單元,因?yàn)镃heckBox組件是在StdCtrls單元中說明的。當(dāng)設(shè)計(jì)窗體時(shí),Delphi7.0會自動建立一個(gè)和該窗體有關(guān)的單元文件,但并非所有的單元都和窗體有關(guān),程序員可以自行編寫只包括過程與函數(shù)的單元。1.程序單元的結(jié)構(gòu)不管一個(gè)單元是否和一個(gè)窗體有關(guān),單元的結(jié)構(gòu)都是相同的。其結(jié)構(gòu)如下:
unit<單元名稱>interfaceuses<選擇性的單元列表>{公有說明}implementationuses<選擇性的單元列表>{私有說明}{過程與函數(shù)的執(zhí)行部分}initialization{選擇性的初始化程序}end1.4.2ObjectPascal的單元(2)2.程序單元的接口部分Interface是單元的接口部分,它決定了本單元對其他任何單元或程序的可見(可訪問)部分??梢栽诮涌诓糠终f明變量、常量、數(shù)據(jù)類型、過程與函數(shù)等等。在設(shè)計(jì)窗體的單元中,將窗體數(shù)據(jù)類型、窗體變量和事件處理過程都在這一部分說明。Interface標(biāo)志單元接口部分的開始。在Interface中說明的部分對其他單元或應(yīng)用程序是可見的。一個(gè)單元可以使用其他單元的說明,只需要在uses語句中指明那些單元即可。例如,在單元A中編寫程序代碼,想調(diào)用單元B中Interface部分說明的程序??梢园褑卧狟的名稱加入到A的Interface部分的uses子句中,則任何A中的程序都可以調(diào)用B中說明的程序。但如果B出現(xiàn)在A的Interface部分的uses子句中,那么單元A便不能出現(xiàn)在B的Interface的uses子句中。因?yàn)檫@樣會產(chǎn)生對單元的循環(huán)訪問。當(dāng)試圖編譯時(shí),會產(chǎn)生出現(xiàn)錯誤信息。3.程序單元的實(shí)現(xiàn)部分實(shí)現(xiàn)部分Implementation中包含Interface中說明的過程、函數(shù)、事件處理過程的具體實(shí)現(xiàn)代碼。這一部分可以有自己的額外說明,但這些說明是私有的,外部程序不能調(diào)用這些說明。在Interface中說明的函數(shù)實(shí)體必須在1.4.2ObjectPascal的單元(3)4.程序單元的初始化部分初始化當(dāng)前單元所使用的數(shù)據(jù),或是通過Interface部分將數(shù)據(jù)提供給其他應(yīng)用程序單元使用時(shí),可以在單元的end前加入一個(gè)Initialization部分。當(dāng)一個(gè)應(yīng)用程序使用一個(gè)單元時(shí),在單元中的Initialization部分會先于其他的代碼執(zhí)行。如果一個(gè)應(yīng)用程序使用了多個(gè)單元,則每一個(gè)單元的初始化部分都會在所有的程序代碼前執(zhí)行。5.使用Delphi7.0的組件及其單元在窗體中加入組件時(shí),如果該組件在組件庫中,Delphi7.0會在單元的Interface部分的uses子句中自動加上需要使用的單元名稱。但有些對象在Delphi7.0的環(huán)境中并沒有組件存在。例如,想在單元中加入一個(gè)預(yù)定義的信息框,則必須把MsgDlg單元加入到uses子句中。要使用在其他單元中說明的函數(shù),應(yīng)在函數(shù)的前面加上這一單元的名稱,并用‘.’號隔開。例如,要在Unit2中使用Unit1中說明的test函數(shù),應(yīng)使用下面的Implementation部分出現(xiàn),可以使用標(biāo)題簡寫:只輸入Procedure或Function保留字,后面跟過程或函數(shù)的名稱即可,其后則是程序的實(shí)現(xiàn)部分了。2.1基本概念
Delphi7.0是一個(gè)基于ObjectPascal語言的Windows應(yīng)用程序開發(fā)系統(tǒng),在所有的事件處理過程和應(yīng)用程序中都是使用它來編寫程序代碼。ObjectPascal編程語言是在Pascal語言的基礎(chǔ)上發(fā)展起來的,它繼承了Pascal語法嚴(yán)謹(jǐn)、數(shù)據(jù)結(jié)構(gòu)豐富等優(yōu)點(diǎn),同時(shí)融入了面向?qū)ο缶幊痰恼Z法要素,使之成為一種優(yōu)秀的面向?qū)ο缶幊陶Z言。2.1.1保留字
首先介紹ObjectPascal語言的最基本內(nèi)容:保留字和標(biāo)志符。保留字(ReservedWords)是由系統(tǒng)規(guī)定的、具有特定意義的單詞。在編程時(shí)不能被重新定義或另作他用。ObjectPascal語言規(guī)定的保留字有65個(gè),詳見本教程P23頁表2-1。
除了上述的保留字外,Private、Protected、Public、Published和Automated在定義對象類型時(shí)也作為保留字,而在其他場合則作為指令符。單詞at和on也具有特殊的含義。
注意:ObjectPascal編程語言和許多編程語言不同,它對單詞的大小寫是不敏感的。ObjectPascal不區(qū)分大小寫。IN、in和In都被看做是同樣的意義。2.1.2標(biāo)識符
標(biāo)識符是ObjectPascal語言中用來表示應(yīng)用程序量的名稱。包括:變量(Var)、常量(Const)、類型(Type)、過程(Procedure)、方法(Method)等。標(biāo)識符分為標(biāo)準(zhǔn)標(biāo)識符和自定義標(biāo)識符兩類。
標(biāo)準(zhǔn)標(biāo)識符是ObjectPascal語言系統(tǒng)預(yù)先分配給標(biāo)準(zhǔn)常量、標(biāo)準(zhǔn)類型、標(biāo)準(zhǔn)函數(shù)、標(biāo)準(zhǔn)過程及標(biāo)準(zhǔn)文件使用的標(biāo)識符。如標(biāo)準(zhǔn)常量:False、True;標(biāo)準(zhǔn)類型:integer、char、real;標(biāo)準(zhǔn)函數(shù):Abs、Sqr、Cos等。自定義標(biāo)識符是程序員根據(jù)需要為自己定義的常量、變量、類型、函數(shù)、過程以及所編寫的程序名等。ObjectPascal標(biāo)識符由字母、數(shù)字、下劃線組成,其規(guī)定為:(1)必須以字母或下劃線開始;(2)不能與保留字相同;(3)避免與ObjectPascal已經(jīng)使用的標(biāo)準(zhǔn)標(biāo)識符相同。2.1.3指令符
指令符(directives)也是具有特殊意義的單詞,但與保留字不同的是可以將指令符定義為標(biāo)識符,ObjectPascal不會指示出錯,但這容易混淆。ObjectPascal規(guī)定的指令符見表2-2。absoluteabstractassemblerautomatedcdcelcontainsdefaultdispiddynamicexportexternalfarforwardimplementsindexmessagenamenearnodefaultoverloadoverridepackagepascalprivateprotectedpublicreadreadonlyregisterretroducerequiresresidentsafecallstdcallstoredvirtualwritewriteonly表2-2ObjectPascal語言規(guī)定的指令字2.2數(shù)據(jù)類型
描述客觀事物的數(shù)、字符以及所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序加工處理的符號的集合稱為數(shù)據(jù)。數(shù)據(jù)的一個(gè)重要特征就是其所屬的數(shù)據(jù)類型,數(shù)據(jù)類型不僅確定了該類數(shù)據(jù)的表示形式和取值范圍,而且還確定了數(shù)據(jù)所能夠參加的各種運(yùn)算。ObjectPascal提供了多種數(shù)據(jù)類型,包括標(biāo)準(zhǔn)數(shù)據(jù)類型和高級數(shù)據(jù)類型。標(biāo)準(zhǔn)數(shù)據(jù)類型屬于ObjectPascal內(nèi)部約定的數(shù)據(jù)類型,無需定義就可以直接使用。標(biāo)準(zhǔn)數(shù)據(jù)類型有整型(Integer)、實(shí)型(Real)、字符型(Character)、字符串型(String)、布爾型(Boolean)五種。高級數(shù)據(jù)類型體現(xiàn)了特殊的數(shù)據(jù)結(jié)構(gòu),在使用之前必須由用戶自己進(jìn)行定義。高級數(shù)據(jù)類型有枚舉型(Enumerated)、子界型(Subrange)、集合類型(Set)、數(shù)組類型(Array)、記錄類型(Record)文件類型(File)、類類型(Class)、類引用類型(ClassReference)、接口類型(Interface)、指針類型(Pointer)、過程類型(Procedural)、可變類型(Variant)。2.2.1整型
整數(shù)包括正整數(shù)、負(fù)整數(shù)和零。整型是存儲整數(shù)數(shù)據(jù)的類型。ObjectPascal包括9種形式的整型數(shù)據(jù),詳見本教程P25頁表2-3。
前2種為一般整型,后7種為基本整型,應(yīng)盡量使用Integer、Cardinal兩種基本類型,因?yàn)樗鼈冊诟鞣NCPU和操作系統(tǒng)中都提供最佳的性能。通常,作用于整數(shù)的算術(shù)運(yùn)算符返回Integer類型的值。在當(dāng)前執(zhí)行中,等價(jià)于32位的長整型(LongInt)。僅當(dāng)對Int64類型執(zhí)行運(yùn)算時(shí),運(yùn)算結(jié)果返回Int64類型。因此,下面的代碼執(zhí)行后得到的結(jié)果是不正確的:vari:Integer;j:Int64;...i:=High(Integer);//取Integer類型中的最大值j:=i+1;要使返回值是Int64類型,在上面的情況中可以將
i轉(zhuǎn)換為Int64。代碼如下:...j:=Int64(i)+1;2.2.2實(shí)型
實(shí)數(shù)是最常用的數(shù)據(jù)類型。在ObjectPascal中實(shí)數(shù)有兩種表示方法:小數(shù)表示法和科學(xué)計(jì)數(shù)法。例如:-3.6,2.4e0,–1.2e-5,3E7
小數(shù)表示法與日常數(shù)學(xué)中所用表示方法相同??茖W(xué)計(jì)數(shù)法中,e之前表示有效數(shù)字,e之后數(shù)字表示10的冪。即–1.2e-5=(-1.2)×10-5=-0.000012
需要注意的是小數(shù)表示法中小數(shù)點(diǎn)前后都必須有數(shù)字,科學(xué)計(jì)數(shù)法中e前后都必須有數(shù)字,e可以大寫成E。實(shí)型是存儲實(shí)數(shù)數(shù)據(jù)的類型。ObjectPascal包括5種形式的實(shí)型數(shù)據(jù),詳見本教程P26表2-4。
(圖1-2)
前六種為基本數(shù)據(jù)類型,Real為一般實(shí)型。最常用的實(shí)型是Real類型,它與Double等價(jià)。Currency是專為處理貨幣而設(shè)計(jì)的,該類型與其他實(shí)型進(jìn)行運(yùn)算時(shí),Delphi自動將結(jié)果轉(zhuǎn)化為Currency類型。2.2.3字符型
字符型是存儲單個(gè)字符的類型。ObjectPascal包括3種形式的字符型數(shù)據(jù),詳見表2-5?;咀址愋褪茿nsiChar和WideChar。AnsiChar的尺寸是一個(gè)字節(jié)(8位),其值參照本地字符集。AnsiChar最初模仿ANSI字符集,但現(xiàn)在用于擴(kuò)大到當(dāng)前的本地字符集。WideChar字符用多于一個(gè)字節(jié)來表示每個(gè)字符。WideChar的尺寸是一個(gè)字(16位),其字符順序參照Unicode字符集,Unicode字符集中的前256個(gè)字符對應(yīng)ANSI字符。一般字符類型是Char,等價(jià)于AnsiChar。字符類型數(shù)據(jù)的表示方法是用兩個(gè)單引號括起單個(gè)字符如:'A'、'6'、'.'。
''表示空格符。表2-5ObjectPascal語言的字符型類型名稱字節(jié)數(shù)取值范圍Ansi字符型AnsiChar1擴(kuò)展ANSI字符集寬字符型WideChar2UniCode字符集字符型Char1(2)擴(kuò)展ANSI字符集2.2.4字符串型
字符串型是存儲字符串?dāng)?shù)據(jù)的類型。ObjectPascal包括4種形式的字符串型數(shù)據(jù),詳見本教程P27頁表2-6。
保留字string的作用如一般類型的標(biāo)識符。例如: varS:string;
創(chuàng)建了變量S,用于保存串。在默認(rèn)的編譯指示{$H+}狀態(tài)下,編譯器將string(后面沒有跟隨方括號和數(shù)字)解釋為AnsiString;使用編譯指示{$H-}時(shí),解釋為ShortString。
ShortString類型串的長度在0到255之間。ShortString串的長度可以動態(tài)改變,其占用的內(nèi)存是靜態(tài)的,總是256字節(jié);第一個(gè)字節(jié)存儲串的長度,其余255個(gè)字節(jié)存儲串中的字符。
AnsiString也叫做長串(longstring),用來表示動態(tài)分配的串。
WideString類型表示16位Unicode字符的動態(tài)分配的串。WideString類型大部分的特性與AnsiString類型相似。
ObjectPascal還支持其他最大長度在0到255之間的短串。可以通過在保留字string后邊附加方括號括起來的數(shù)字來表示。例如: varMyString:string[100];
創(chuàng)建了一個(gè)叫做MyString的變量,其最大長度為100個(gè)字符。2.2.5布爾型
布爾型數(shù)據(jù)用于進(jìn)行邏輯運(yùn)算,布爾型數(shù)據(jù)的值只有兩個(gè):True(真)和False(假)。ObjectPascal包括4種形式的布爾型數(shù)據(jù),詳見表2-7。Boolean類型是編程時(shí)常用的布爾類型,其他三種類型是為了兼容其他語言而設(shè)置的。Boolean類型的取值為False和True兩個(gè)符號常量。在ObjectPascal中,布爾表達(dá)式不能被等同為整數(shù)或?qū)崝?shù)。因此,如果x是一個(gè)整數(shù)類型的變量,那么語句 ifxthen...;將產(chǎn)生一個(gè)編譯錯誤??梢詫⑸蟼€(gè)語句改為: ifx=1then...;
表2-7ObjectPascal語言的布爾型類型名稱字節(jié)數(shù)取值布爾型Boolean1只能為False(0)或True(1)字節(jié)布爾型ByteBool1False或True(非False)寬布爾型WordBool2False或True(非False)長布爾型LongBool4False或True(非False)2.2.6序數(shù)類型1.序數(shù)類型
序數(shù)類型包括整數(shù)、字符、布爾、枚舉、子界等類型。序數(shù)類型定義了一個(gè)有序的值的集合。集合中的每個(gè)值(除第一個(gè))都有一個(gè)唯一的前驅(qū)值,每個(gè)值(除最后一個(gè))都有一個(gè)唯一的后繼值。對于第一個(gè)序數(shù)的前趨和最后一個(gè)序數(shù)的后繼在此不做討論。此外,每個(gè)值都有一個(gè)序號,類型中的序號決定值在類型中的順序。大多數(shù)情況下,如果一個(gè)值的序號為n,那么它的前驅(qū)值的序號為n–1,后繼值的序號為n+1。
2.序數(shù)函數(shù)(1)序數(shù)函數(shù)Ord()返回?cái)?shù)據(jù)的序數(shù)。例如:Ord(6)的返回值為6,表示整數(shù)6的序數(shù)是其本身。(2)前趨函數(shù)Pred()返回?cái)?shù)據(jù)的前趨值。例如:Pred('e')的返回值為'd',表示字符e的前趨是字符d。(3)后繼函數(shù)Succ()返回?cái)?shù)據(jù)的后繼值。例如:Succ(False)的返回值為True,表示布爾型數(shù)據(jù)True是False的后繼。(4)首序數(shù)函數(shù)Low()返回序數(shù)類型的數(shù)據(jù)中序數(shù)最小的一個(gè)數(shù)據(jù)。(5)末序數(shù)函數(shù)High()返回序數(shù)類型的數(shù)據(jù)中序數(shù)最大的一個(gè)數(shù)據(jù)。2.3常量與變量
在程序設(shè)計(jì)中常用到兩種形式的數(shù)據(jù),一種是在程序執(zhí)行過程中其值保持不變的數(shù)據(jù),稱為常量;另一種是在程序執(zhí)行過程中其值可以改變的數(shù)據(jù),稱為變量。
常量是一種在程序執(zhí)行進(jìn)程中其值保持不變的數(shù)據(jù)。根據(jù)使用的方式不同,程序中的常量分為直接常量、真實(shí)常量與類型常量。2.3.1常量1.直接常量直接常量是指在程序中直接引用的整數(shù)、實(shí)數(shù)、字符、字符串或其他不同類型的常數(shù)。下列常數(shù)均屬于直接常量。(1)帶有正負(fù)號的整數(shù)或無符號的整數(shù),如:-1,+2,2003,0。(2)實(shí)數(shù),包括定點(diǎn)實(shí)數(shù)與浮點(diǎn)實(shí)數(shù)兩種表示形式。定點(diǎn)實(shí)數(shù)即小數(shù)形式,如:0.03,-32.48,+102.9,0.0。浮點(diǎn)實(shí)數(shù)即指數(shù)形式,如:+2.56E-5,-1.2E+8,3.2E12。2.3.1常量(2)2.真實(shí)常量真實(shí)常量是指一個(gè)被聲明的標(biāo)識符,它的值不能改變。如果在一個(gè)程序中,某一個(gè)常數(shù)反復(fù)多次出現(xiàn)可以定義一個(gè)標(biāo)識符來代表該常數(shù)。定義常量時(shí)使用常量說明語句,語法格式為:const<常量名1>=<常量值1>…<常量名n>=<常量值n>
其中const是ObjectPascal的保留字,表示常量定義的開始。<常量名>即常量的標(biāo)識符,<常量值>是直接常量或常量組成的表達(dá)式。例如:constPI=3.1415926;K=PI/180;
不能在程序中給常量另行賦值,否則會導(dǎo)致語法錯誤。(3)字符,由單撇號括起來的單個(gè)字符,如:'a','C','6','+'。(4)字符串,由雙撇號括起來的字符串,如:"hello","abc123","3.234"。(5)布爾型常數(shù),只有兩個(gè)值True和False。2.3.1常量(3)3.類型常量類型常量不同于真實(shí)常量,它能保存數(shù)組、記錄等高級數(shù)據(jù)類型的值。定義類型常量的語法格式如下:
const <常量名>:<類型名>=<常量值>;例如:constHello:string='Hello';Max:Integer=100;Digits:array[0..9]ofChar=('0','1','2','3','4','5','6','7',‘8’,‘9’);//定義了一個(gè)常量用于保存數(shù)組在缺省的編譯狀態(tài){$J-}中,類型常量不能被賦予新的值,這時(shí)的類型常量相當(dāng)于只讀變量。然而,如果編譯指示{$J+}有效,那么類型常量可以被賦予新的值,這時(shí)的類型常量相當(dāng)于被初始化過的變量。
變量是程序代碼中代表一個(gè)內(nèi)存地址的標(biāo)識符,而此地址的內(nèi)存內(nèi)容在程序代碼執(zhí)行時(shí)可以被改變。在使用變量前必須對它進(jìn)行說明,即對它進(jìn)行命名,并說明它的類型。變量就像數(shù)據(jù)容器,而且由于變量被定義了類型,只能用于儲存與其定義類型相兼容的數(shù)據(jù)。2.3.2變量(1)變量有如下三個(gè)主要特征。(1)變量名:即變量的標(biāo)識符,用于對所代表的內(nèi)存單元的引用。(2)類型:變量的類型決定了變量中所存放數(shù)據(jù)的范圍、有效的操作、存儲空間的大小和格式。(3)變量值:變量所代表的內(nèi)存單元中的數(shù)據(jù)值。程序中的變量必須先聲明才能使用。1.變量的聲明變量在單元、函數(shù)或過程的聲明部分進(jìn)行聲明,聲明位置決定了變量的作用范圍。變量聲明的格式為:2.3.2變量(2)
聲明多個(gè)同類型的變量時(shí)可采用如下格式:
var<變量名1>…<變量名n>:<類型名>
其中var是ObjectPascal的保留字,表示變量定義的開始,<變量名>可以是任意合法的標(biāo)識符,<類型名>可以是ObjectPascal的基本數(shù)據(jù)類型也可以是由用戶定義的高級數(shù)據(jù)類型。聲明在過程或函數(shù)內(nèi)部的變量有時(shí)叫做局部變量,而在應(yīng)用程序開始聲明的變量叫做全局變量。全局變量可以在聲明時(shí)對它進(jìn)行初始化,格式為:
var<變量名>:<類型名>=<常量表達(dá)式>
其中常量表達(dá)式的值必須與變量定義的類型相兼容。var<變量名1>:<類型名1>…<變量名n>:<類型名n>2.變量使用
變量經(jīng)過聲明之后,就可以在程序中使用了,通??梢酝ㄟ^賦值語句給變量賦值。如果沒有明確初始化全局變量,那么編譯器將對其初始化為0。不同的是,局部變量不能在其聲明中被初始化并且在其被賦值之前包含的是隨機(jī)數(shù)據(jù)。一旦聲明了一個(gè)變量,應(yīng)及時(shí)對它賦值進(jìn)行初始化,未經(jīng)初始化的變量的值是一個(gè)不確定的隨機(jī)數(shù),如果該變量參與運(yùn)算或是出現(xiàn)程序流程中將會產(chǎn)生意想不到的后果。初始化變量的最簡單方法就是給變量賦值。2.3.2變量(3)2.4運(yùn)算符與表達(dá)式
運(yùn)算是對數(shù)據(jù)進(jìn)行加工處理的過程,描述各種不同運(yùn)算的符號稱為運(yùn)算符,而參與運(yùn)算的數(shù)據(jù)稱為操作數(shù)。表達(dá)式是表示某個(gè)求值規(guī)則的運(yùn)算公式,它由運(yùn)算符和圓括號將常量、變量等操作數(shù)以合理的形式組合而成。表達(dá)式可以用來執(zhí)行運(yùn)算、操作或測試數(shù)據(jù),每個(gè)表達(dá)式都會產(chǎn)生惟一的值。表達(dá)式的類型由運(yùn)算符的類型決定。在ObjectPascal中有以下幾種運(yùn)算符:算術(shù)運(yùn)算符、位運(yùn)算符、字符串運(yùn)算符、關(guān)系運(yùn)算符、布爾運(yùn)算符、集合運(yùn)算符、指針運(yùn)算符、類運(yùn)算符和@運(yùn)算符。本章中先介紹幾種常用的運(yùn)算符。1.算術(shù)運(yùn)算符
ObjectPascal有8個(gè)算術(shù)運(yùn)算符,在這8個(gè)算術(shù)運(yùn)算符中,除取正“+”、取負(fù)“-”是單目運(yùn)算符外,其他均為雙目運(yùn)算符,詳見本教程P31頁表2-8。其中+、-、*運(yùn)算的含義與數(shù)學(xué)中的相同,參加運(yùn)算的數(shù)可以是整型也可以是實(shí)型,結(jié)果由Delphi7.0自動向精度高的數(shù)據(jù)類型轉(zhuǎn)化。參加除法運(yùn)算“/”的數(shù)無論是整型或是實(shí)型,結(jié)果都是實(shí)型。參加整數(shù)除法“div”和求余運(yùn)算“mod”的數(shù)必須是
2.4.1算術(shù)運(yùn)算符2.4.1算術(shù)運(yùn)算符
2.算術(shù)表達(dá)式算術(shù)表達(dá)式是由算術(shù)運(yùn)算符、數(shù)值型常量、變量、圓括號組成,其運(yùn)算結(jié)果為一數(shù)值。 例如:3*4+(90-5)/4*2的值為54.5。在書寫算術(shù)表達(dá)式時(shí)應(yīng)當(dāng)注意以下兩點(diǎn):(1)在數(shù)學(xué)中可以省略乘號,但在算術(shù)表達(dá)式書寫中不可以省略,如在數(shù)學(xué)中相乘可以寫成2x,但在編程中必須寫成2*x;(2)所有括號都用小括號(),括號必須配對,例如數(shù)學(xué)式3[x+(y-z)]在編程中必須寫成3*(x+(y-z))。整型,結(jié)果也是整型,分別是除法的商和余數(shù)。在表達(dá)式a/b、adivb、amodb中,如果b的值為0將會觸發(fā)一個(gè)錯誤。 例如:10mod3的值為1,10div3的值為3。2.4.2位運(yùn)算符
位運(yùn)算符是指對操作數(shù)進(jìn)行的按位邏輯運(yùn)算。其運(yùn)算對象是整數(shù),運(yùn)算結(jié)果也是整數(shù),ObjectPascal有6個(gè)邏輯運(yùn)算符,詳見表2-9。and、or、not和xor運(yùn)算符當(dāng)運(yùn)算符兩側(cè)為數(shù)值數(shù)據(jù),則將數(shù)值數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)(補(bǔ)碼形式)進(jìn)行按位運(yùn)算。設(shè)x值為3,y值為5,在內(nèi)存中按二進(jìn)制保存,即x,y值分別為00000011,00000101。按位計(jì)算結(jié)果如下:notx的值為 11111100(十進(jìn)制數(shù)–4)xandy的值為 00000001(十進(jìn)制數(shù)1)xory的值為 00000111(十進(jìn)制數(shù)7)xxory的值為 00000110(十進(jìn)制數(shù)6)xshl2的值為 00001100(十進(jìn)制數(shù)12)xshr1的值為 00000010(十進(jìn)制數(shù)2)運(yùn)算符名稱舉例運(yùn)算符取值名稱舉例not按位取反notxxor按位異或xxoryand按位與xandyshl左移位xshl2or按位或xoryshr右移位yshr1表2-9ObjectPascal語言的位運(yùn)算符2.4.3字符串運(yùn)算符ObjectPascal只有一種字符串運(yùn)算符,即連接運(yùn)算符“+”。該運(yùn)算符用于連接兩個(gè)或更多的字符串。當(dāng)兩個(gè)字符串用連接運(yùn)算符連接起來后,第二個(gè)字符串直接添加到第一個(gè)字符串的尾部,結(jié)果是一個(gè)更長的包含兩個(gè)字符串的全部內(nèi)容的字符串,也可以把多個(gè)字符串連接起來,每兩個(gè)字符串之間都要用“+”號分隔。例如:'abcdef'+'123'連接后結(jié)果為:'abcdef123''abc'+'123'+'xyz'連接后結(jié)果為:'abc123xyz‘
加號(+)運(yùn)算符對串的操作與其對數(shù)字的操作有很大差異。對于數(shù)字a、b,表達(dá)式a+b與b+a是等價(jià)的,對于字符串s1、s2表達(dá)式s1+s2與s2+s1不是等價(jià)的。例如,當(dāng)s1為'hello'、s2為'world'時(shí),s1+s2返回的值是'helloworld',而s2+s1返回的值是'worldhello'。也就是說,當(dāng)加號(+)作為字符串運(yùn)算符時(shí),操作數(shù)的位置順序直接影響運(yùn)算結(jié)果。2.4.4關(guān)系運(yùn)算符
關(guān)系運(yùn)算符又稱為比較運(yùn)算符,用來對兩個(gè)表達(dá)式的值進(jìn)行比較,比較的結(jié)果是一個(gè)布爾值(True或False)。關(guān)系表達(dá)式是指用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子。ObjectPascal提供的關(guān)系運(yùn)算符有9種,詳見表2-10。表2-10ObjectPascal語言的關(guān)系運(yùn)算符運(yùn)算符名稱舉例運(yùn)算符取值名稱舉例=等于4=5值為False>大于4>5值為False<>不等于4<>5值為True<=小于或等于4<=5值為True<小于4<5值為True>=大于或等于4>=5值為False
關(guān)系運(yùn)算符兩側(cè)可以是數(shù)值表達(dá)式、字符型表達(dá)式或其他表達(dá)式,也可以是常量、變量或函數(shù),但其兩側(cè)的數(shù)據(jù)類型必須是相容的標(biāo)準(zhǔn)數(shù)據(jù)類型或順序類型。各關(guān)系運(yùn)算符的運(yùn)算級別相同。運(yùn)算次序?yàn)椋合确謩e求出關(guān)系運(yùn)算符兩側(cè)表達(dá)式的值,然后再把兩者的值進(jìn)行比較,兩者的關(guān)系若與關(guān)系運(yùn)算符指示的一樣,則關(guān)系運(yùn)算的結(jié)果為真(True),否則結(jié)果為假(False)。數(shù)值型數(shù)據(jù)按其數(shù)值大小進(jìn)行比較;字符型數(shù)據(jù)按其ASCII碼值進(jìn)行比較,比較字符串時(shí)先比較第一個(gè)字符,其中ASCII碼值較大的字符所在的字符串大。若第一個(gè)字符相同時(shí)比較第二個(gè)字符,…以此類推。順序類型數(shù)據(jù)的比較按照其序數(shù)進(jìn)行比較。2.4.5布爾運(yùn)算符
在表示較為復(fù)雜的條件判斷時(shí),必須使用布爾表示式。布爾表達(dá)式是指用布爾運(yùn)算符連接若干關(guān)系表達(dá)式或布爾值組成的式子,如a≤x≤b可以表示為:a<=xAndx<=b,布爾表達(dá)式的值也是一個(gè)布爾值。ObjectPascal提供4種布爾運(yùn)算符,詳見表2-11。表2-11ObjectPascal語言的布爾運(yùn)算符運(yùn)算符名稱舉例說明and與(4>5)and(3<4)該表達(dá)式值為False。當(dāng)兩個(gè)表達(dá)式的值均為真,結(jié)果才為真,否則結(jié)果為假。or或(4>5)or(3<4)該表達(dá)式值為True。兩個(gè)表達(dá)式中只要有一個(gè)表達(dá)式的值為真,結(jié)果就為真,兩個(gè)表達(dá)式的值均為假時(shí)結(jié)果為假。not非not(4>5)該表達(dá)式值為True。進(jìn)行取“反”操作,由真變成假或由假變成真。xor異或(4>5)xor(3<4)該表達(dá)式值為True。當(dāng)兩個(gè)布爾表達(dá)式值不同時(shí)結(jié)果為True。2.4.6運(yùn)算符的優(yōu)先級
在一個(gè)表達(dá)式中進(jìn)行多種操作時(shí),ObjectPascal會按一定的順序進(jìn)行求值,這個(gè)順序稱為運(yùn)算符的優(yōu)先順序。在表達(dá)式中運(yùn)算符的優(yōu)先級決定了運(yùn)算被執(zhí)行的順序。常用運(yùn)算符的優(yōu)先順序如本教程P34頁表2-12所示。
當(dāng)一個(gè)表達(dá)式中含有多個(gè)算術(shù)運(yùn)算符時(shí),將按優(yōu)先級由高到低的順序求值。優(yōu)先級高的運(yùn)算符在優(yōu)先級低的運(yùn)算符之前求值,優(yōu)先級相同時(shí)自左向右求值,如果表達(dá)式中含有括號,則先計(jì)算括號內(nèi)表達(dá)式的值,如果有多層,先計(jì)算最內(nèi)層括號中的表達(dá)式。例 如表達(dá)式:
x+y*z
先運(yùn)算y乘以z,然后將乘積(運(yùn)算結(jié)果)與x相加;運(yùn)算符*先被執(zhí)行,因?yàn)樗冗\(yùn)算符+優(yōu)先??梢允褂脠A括號超越所有的優(yōu)先級規(guī)則。圓括號中的表達(dá)式最先被求值,因此可以被視為一個(gè)單獨(dú)的操作數(shù)。例如表達(dá)式:
(x>y)and(x>z)
首先判斷x是否大于y,然后判斷x是否大于z,最后將兩次判斷的結(jié)果相與,只有當(dāng)x的值比y、z的值都大時(shí)此表達(dá)式的值才為true。該表達(dá)式不能書寫為:
x>yandx>z
根據(jù)運(yùn)算符的優(yōu)先級,該表達(dá)式將解釋為:
(x>(yandx))>z
若x,y,z均為實(shí)型或整型數(shù)據(jù)時(shí)將產(chǎn)生編譯錯誤。圓括號通常使代碼更容易讀寫,在編程過程中應(yīng)當(dāng)合理使用圓括號。2.5語句
語句是執(zhí)行具體操作的指令,是由ObjectPascal的保留字、變量名、函數(shù)名及Delphi7.0編輯器可以識別的指令符號組成,建立正確的語句必須遵從ObjectPascal的語法規(guī)則。ObjectPascal程序語句書寫比較自由,可以把多個(gè)語句放在一個(gè)程序行中,也可把一個(gè)語句分多行書寫,但需要記住ObjectPascal的每個(gè)語句都必須以分號“;”結(jié)束。在編寫自己的ObjectPascal程序時(shí),要注意程序的可讀性。Pascal語言是英式結(jié)構(gòu)語言,在程序中選擇合適的縮排、大小寫風(fēng)格,并在需要時(shí)將程序代碼分行,會使得程序代碼能夠很容易地被自己和他人讀懂。對于較為復(fù)雜的程序常用到復(fù)合語句,復(fù)合語句是指將多個(gè)語句用begin和end兩個(gè)保留字包圍起來,格式如下:begin<語句1>;…;<語句n>;end;復(fù)合語句在ObjectPascal中被視為一個(gè)語句,因此在end后必須加上分號“;”。2.5.1語句的書寫規(guī)則2.5.2語句格式中的符號約定
為了解釋語法規(guī)則,在說明各語句、函數(shù)的格式和功能時(shí)用到表2-13中所列符號,這些符號的含義詳見表2-13。符號含義<>必選參數(shù)表示符。尖括號中的中文提示說明,由使用者根據(jù)問題的需要提供具體參數(shù),如果缺少必選參數(shù),語句則發(fā)生錯誤[]可選參數(shù)表示符。方括號中的中文提示說明,由使用者根據(jù)問題的需要決定是否選用該參數(shù),如果省略則默認(rèn)為缺省值|多中取一表示符。含義為“或者選擇”,豎線分隔多個(gè)選擇項(xiàng),必須選擇其中一個(gè)選項(xiàng)。{}包含符號。其中包含多選一的各個(gè)選項(xiàng),…同類項(xiàng)目的重復(fù)…省略了在當(dāng)時(shí)敘述中不涉及的部分表2-13語句格式中的符號約定2.5.3賦值語句
在事件處理過程中,最常用到的工作就是把一個(gè)新值賦給一個(gè)屬性或變量。在設(shè)計(jì)用戶界面時(shí),可以使用ObjectInspector(對象檢查器)來改變其屬性;但有時(shí)需要在程序執(zhí)行時(shí)改變屬性的值,而且有些屬性只能在執(zhí)行時(shí)改變,這些屬性在Delphi的在線幫助的Proprety主題中被標(biāo)為執(zhí)行期屬性。進(jìn)行這種改變,就必須使用賦值語句。賦值語句是ObjectPascal程序中最常用的語句,其語法格式為:
{變量名|屬性名}:=<表達(dá)式>
注意“:=”是賦值號,不要寫為“=”。賦值語句的功能是先計(jì)算表達(dá)式的值,然后把結(jié)果賦給賦值號左邊的變量或?qū)傩?。賦值號為“:=”,不論給屬性還是給變量賦值,都是將右邊的值賦給左邊的屬性或變量。當(dāng)將一個(gè)屬性值、變量、常量或文本數(shù)據(jù)賦給屬性或變量時(shí),所賦值的類型和接受此值的屬性或變量的類型應(yīng)相同或兼容,否則會導(dǎo)致錯誤。3.1順序控制結(jié)構(gòu)
順序控制結(jié)構(gòu)是程序設(shè)計(jì)中最簡單、最常用的基本結(jié)構(gòu)。在順序控制結(jié)構(gòu)中,各程序段按照出現(xiàn)的先后順序依次執(zhí)行。它是任何程序的基本結(jié)構(gòu)。
程序流程控制語句是用來控制程序中各語句執(zhí)行順序的語句,是程序中非常關(guān)鍵和基本的部分。程序流程控制語句可以把單個(gè)的語句組合成有意義的、能完成一定功能的小邏輯模塊。1966年Bohm和Jacopini證明了任何復(fù)雜的算法都可以用順序、選擇、循環(huán)三種結(jié)構(gòu)組合而成,所以這三種結(jié)構(gòu)稱為程序的三種基本控制結(jié)構(gòu)。合理地使用流程控制語句在很大程度上影響了編寫程序的質(zhì)量。在一段程序中,計(jì)算機(jī)按照語句順序執(zhí)行,當(dāng)遇到選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)時(shí),就有可能改變執(zhí)行順序。3.1.1程序流程控制語句3.1.2順序控制結(jié)構(gòu)(1)
順序控制結(jié)構(gòu)是計(jì)算機(jī)按照語句的前后順序依次執(zhí)行的程序結(jié)構(gòu)。在順序控制結(jié)構(gòu)中,程序依次地經(jīng)過輸入、處理到最后的輸出。Delphi7.0提供了基本的輸入/輸出控件(在第7章中將給予介紹)。對于順序控制結(jié)構(gòu)來說,組成程序體主要語句就是賦值語句。接下來通過一個(gè)實(shí)例來說明順序控制結(jié)構(gòu)的程序設(shè)計(jì)方法。1.主要步驟
進(jìn)入Delphi7.0后在standard標(biāo)簽頁中找到相關(guān)組件,設(shè)計(jì)如圖3-1窗體及有關(guān)對象。
分別在窗體的建立、小寫按鈕單擊和大寫按鈕單擊事件中輸入如下代碼。
圖3-1大小寫轉(zhuǎn)換程序procedureTForm1.FormCreate(Sender:TObject); begin edit1.Text:='';//初始化文本框,使其為空
end; procedureTForm1.Button1Click(Sender:TObject); vars:string; begin s:=edit1.Text; edit1.Text:=lowercase(s);//轉(zhuǎn)換成小寫
end;【例3-1】大小寫轉(zhuǎn)換程序。3.1.2順序控制結(jié)構(gòu)(2)procedureTForm1.Button2Click(Sender:TObject);vars:string;begins:=edit1.Text;edit1.Text:=uppercase(s);//轉(zhuǎn)換成大寫end;2.分析
在窗體的建立事件中,首先將文本框的內(nèi)容進(jìn)行清空(以便輸入)。在button1按鈕事件中有兩個(gè)語句,先將文本框的內(nèi)容賦給一個(gè)字符串變量s,然后通過一個(gè)lowercase函數(shù)將其轉(zhuǎn)換成小寫后再在文本框中顯示。而button2按鈕事件和button1基本類似,惟一不同的是將其轉(zhuǎn)換成大寫而已??梢钥吹?,在每一個(gè)事件代碼中,其語句都是順序執(zhí)行的。這就是這種結(jié)構(gòu)的特點(diǎn)。3.運(yùn)行結(jié)果
程序運(yùn)行結(jié)果如圖3-2所示。(圖3-2大小寫轉(zhuǎn)換程序運(yùn)行結(jié)果)3.2選擇控制結(jié)構(gòu)
標(biāo)識符是ObjectPascal語言中用來表示應(yīng)用程序量的名稱。包括:變量(Var)、常量(Const)、類型(Type)、過程(Procedure)、方法(Method)等。
在日常生活和工作中,經(jīng)常需要根據(jù)給定的條件進(jìn)行分析、比較和判斷,以采取相應(yīng)的操作。例如,有如下分段函數(shù):
在計(jì)算函數(shù)值時(shí),首先應(yīng)根據(jù)x的值進(jìn)行判斷,當(dāng)x≥0時(shí),y的值是x的平方;否則y的值是x的三次方。選擇控制結(jié)構(gòu)是計(jì)算機(jī)用來描述自然界和社會生活中分支現(xiàn)象的重要手段。其特點(diǎn)是:根據(jù)所給定的條件為真與否,決定從各實(shí)際可能的不同分支中執(zhí)行某一個(gè)分支的相應(yīng)操作,并且任何情況下總有一種分支相對應(yīng)。
ObjectPascal中的分支語句有If語句和Case語句。3.2.1If語句(1)
If語句又稱為條件語句,是最常用的單條件選擇結(jié)構(gòu)。If語句的語法格式為:if<條件>then條件語句1語句2假真
[<語句1>][else
<語句2>=;條件語句一語句二真假
其中<條件>可以是關(guān)系表示式或布爾表達(dá)式,它的值是真(True)或假(False)。如果<條件>的值為真則執(zhí)行<語句1>,否則執(zhí)行<語句2>,If語句所對應(yīng)的流程圖如圖3-3所示。圖3-3if語句
因?yàn)閕f…then…else語句是一個(gè)完整的語句,因此在else之前沒有分號,如果加入分號將產(chǎn)生編譯錯誤。<語句>可以是簡單語句也可以是復(fù)合語句還可以為空語句。當(dāng)然,<語句1>、<語句2>同時(shí)為空語句時(shí)If語句就失去了意義。3.2.1If語句(2)If語句分為簡單條件語句和復(fù)合條件語句兩種。1.簡單條件語句簡單條件語句的<語句>中不包含其他的條件語句。【例3-2】輸入x計(jì)算y的值,其中:分析:這是一個(gè)分支函數(shù),對應(yīng)x的值不同,計(jì)算時(shí)使用的表達(dá)式不同,因此可以用條件語句實(shí)現(xiàn)對表達(dá)式的選擇。varx,y:double;beginifx>=1then y:=x*x+2*xelsey:=2*x+1;end;注意:if…then…else語句是一個(gè)完整的語句,因此在else之前沒有分號,如果加入分號則產(chǎn)生錯誤。3.2.1If語句(2)2.復(fù)合條件語句
如在If語句格式中的<語句1>或<語句2>本身又是一個(gè)If語句,則稱為If語句的嵌套。嵌套的If語句又被稱為復(fù)合條件語句。來看本教程P40頁的例子。由于If語句有兩種,一種是有else語句,一種無else語句。對復(fù)合條件語句有可能有二義性,即可能有兩種不同的理解,如下所示:if<條件1>thenif<條件2>then<語句1>else<語句2>一種理解是else語句是與后一個(gè)then語句配對,另一種理解是else語句是與前一個(gè)then語句配對,兩種理解的效果是不一樣的。ObjectPascal規(guī)定:else總是與同一層的前面最靠近它的、還沒有else語句與之配對的then配對。因此第一種理解是正確的,else語句是與后一個(gè)Then語句配對。3.2.2case語句
對于多分支選擇的情況,若仍然使用If語句就會出現(xiàn)多層嵌套,非常煩瑣。為此ObjectPascal專門提供了Case語句來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。Case語句可以根據(jù)“選擇器表達(dá)式”的值來決定執(zhí)行相應(yīng)的選擇語句。case<選擇器表達(dá)式>of
<情況常量表1>:<語句1>
…
<情況常量表n>:<語句n>
[else
<其他語句列>;]end;<情況常量表>中的值應(yīng)當(dāng)是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭支持系統(tǒng)與殘疾人心理健康的關(guān)聯(lián)性分析
- 有機(jī)化合物的分類方法(分層作業(yè))(原卷版)-2024-2025學(xué)年高二化學(xué)同步備課系列
- 小學(xué)信息技術(shù)與語文教學(xué)的跨學(xué)科融合探討
- 化學(xué)品的合理使用第1課時(shí)-講與練高一化學(xué)必修二
- 2025年度低溫冷鏈倉儲冷庫建設(shè)與設(shè)備銷售安裝服務(wù)合同3篇
- 河北環(huán)境工程學(xué)院《企業(yè)價(jià)值評估》2023-2024學(xué)年第一學(xué)期期末試卷
- 河北化工醫(yī)藥職業(yè)技術(shù)學(xué)院《房地產(chǎn)開發(fā)經(jīng)營與管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 家庭教育與孩子心理健康教育的結(jié)合
- 2025年度蘿卜供應(yīng)鏈融資合同:資金支持與信貸條款3篇
- 二零二五年度教育資源共享合作協(xié)議2篇
- 瑤醫(yī)目診圖-望面診病現(xiàn)用圖解-目診
- 2022年四級反射療法師考試題庫(含答案)
- 新《安全生產(chǎn)法》培訓(xùn)測試題
- 政務(wù)禮儀-PPT課件
- 特種涂料類型——耐核輻射涂料的研究
- 化工裝置常用英語詞匯對照
- 物資采購管理流程圖
- 無牙頜解剖標(biāo)志
- 標(biāo)準(zhǔn)《大跨徑混凝土橋梁的試驗(yàn)方法》
- 格拉斯哥昏迷評分(GCS)--表格-改良自用
- ISO9001記錄保存年限一覽表
評論
0/150
提交評論