Delphi7程序設(shè)計課件_第1頁
Delphi7程序設(shè)計課件_第2頁
Delphi7程序設(shè)計課件_第3頁
Delphi7程序設(shè)計課件_第4頁
Delphi7程序設(shè)計課件_第5頁
已閱讀5頁,還剩277頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Delphi概述

內(nèi)容提要

Delphi簡介

Delphi7集成開發(fā)環(huán)境

Delphi的文件結(jié)構(gòu)簡單應(yīng)用程序?qū)嵗?.1Delphi簡介

Delphi是Borland公司推出的面相對象的可視化編程環(huán)境,特別適合于快速規(guī)范地開發(fā)Windows應(yīng)用程序。從Borland公司推出Delphi1.0至今,Delphi已經(jīng)發(fā)展了7代產(chǎn)品,每一代都是伴隨Windows操作平臺的升級而升級。使用Delphi,用戶可以輕松地進(jìn)行各種復(fù)雜應(yīng)用程序的開發(fā)。

1.2Delphi的新特性Delphi具有簡單、高效、功能強(qiáng)大的特點(diǎn),而Delphi7在以下幾個方面又進(jìn)行了加強(qiáng):

企業(yè)應(yīng)用的MDA開發(fā)可視化的快速Web開發(fā)內(nèi)建的對Linux的跨平臺支持企業(yè)級的報表能力免費(fèi)的DataSnap多層應(yīng)用開發(fā)WindowsXP應(yīng)用

1.4Delphi7的集成開發(fā)環(huán)境

Delphi7的集成開發(fā)環(huán)境(IDE)和

Delphi以前的版本基本一致。它把菜單、多個工具欄以及一組窗口和應(yīng)用程序設(shè)計在一起,將代碼以事件的形式與界面的每一元素建立聯(lián)系,使用戶很方便的在這個高度集成的開發(fā)環(huán)境里進(jìn)行應(yīng)用程序的開發(fā)和調(diào)試。

Delphi7的集成開發(fā)環(huán)境(IDE)是進(jìn)行設(shè)計、運(yùn)行和測試程序的工作系統(tǒng)。啟動Delphi7,運(yùn)行后可以見到它的開發(fā)環(huán)境如圖1-1所示。1.4.1Delphi7集成開發(fā)環(huán)境的組成

主要包括以下幾個窗口:主窗口;對象樹形圖、對象監(jiān)視器窗口;窗體設(shè)計器窗口、代碼編輯器窗口。(圖1-1Delphi7開發(fā)環(huán)境)1.4.2Delphi7主窗體

Delphi7的主窗體位于屏幕的上端,主要包括四個部分:標(biāo)題欄、菜單欄、工具欄和組件欄。Delphi7的主窗口如圖1-2所示。(圖1-2)

Delphi7的主窗口1.4.3對象樹形圖及對象監(jiān)視器窗口

對象樹形圖窗口(ObjectTreeView)用樹形表方式列出了項目中所有的對象,即窗口、組件、菜單等,并清楚地表明了它們之間的關(guān)系。對象樹形窗口如圖1-3所示。

在對象樹形圖窗口下方是對象監(jiān)視器窗口(ObjectInspector),對象監(jiān)視器窗口含有兩個頁卡:屬性頁卡(Properties),顯示窗體中當(dāng)前被選擇部件的屬性信息,并允許改變對象的屬性;事件頁卡(Events),列出了當(dāng)前部件可以響應(yīng)的事件。對象監(jiān)視器窗口如圖1-4所示。

圖1-3對象樹形圖窗

圖1-4對象監(jiān)視器窗1.4.5窗體設(shè)計器在

Delphi7的開發(fā)過程中,大部分的設(shè)計是在窗體設(shè)計器中,主要是通過向窗體中添加組件以及更改窗體及組件的屬性和填寫事件來完成的。當(dāng)創(chuàng)建一個

Windows應(yīng)用程序時,Delphi會缺省的建立一個窗體

Form1。窗體設(shè)計器窗口如圖1-5所示。

對象樹形圖窗口與對象觀察器窗口、窗體設(shè)計器窗口同步,即在此三個工具的任何一個中改變焦點(diǎn)時,另外兩個工具的焦點(diǎn)也會發(fā)生變化。圖1-5窗體設(shè)計器窗口1.4.6代碼編輯器代碼編輯器是一個程序代碼的輸入和編輯工具,也稱單元窗口。通常情況下隱藏在窗體設(shè)計器的下面,可通過菜單或工具欄上的按鈕對它們進(jìn)行切換。Delphi7的代碼編輯器具有彩色高亮度語法顯示、自動進(jìn)行語法校驗、代碼參數(shù)提示輸入和代碼完善等功能。

啟動Delphi或執(zhí)行NewForm菜單項時,系統(tǒng)即生成一個新的窗體,并在代碼編輯器中產(chǎn)生一個新頁卡,在新頁卡中可以編輯相應(yīng)的單元代碼。按F12可以在窗體設(shè)計器窗口和代碼編輯器窗口之間轉(zhuǎn)換。

圖1-6代碼編輯器窗口1.5Delphi的文件結(jié)構(gòu)利用

Delphi開發(fā)

Windows應(yīng)用程序都是以工程為中心的,即每個應(yīng)用程序都對應(yīng)一個工程。工程中可包含一個或多個文件,這些文件主要是工程文件、單元文件、窗體文件和資源文件等。

1.5.1工程文件工程文件是一個

Delphi應(yīng)用程序的總體管理和描述的文件,它的文件后綴是

.dpr,是整個應(yīng)用程序的主程序。工程文件由Delphi7自動生成,一般情況下不修改這個文件。下面是一個工程文件的程序清單。

programProject1; //保留字program說明這是一個工程文件

//文件名為Project1.dpruses//保留字uses對工程所引用的單元進(jìn)行說明

Forms, //引用Forms單元

Unit1in'Unit1.pas'{Form1};

//引用Unit1單元,在當(dāng)前目錄的Unit1.pas文件中,相應(yīng)的窗體為Form1{$R*.res}//系統(tǒng)編譯命令,將擴(kuò)展名為.res的二進(jìn)制資源文件連接到.exe文件中去begin //工程執(zhí)行部分的開始聲明

Application.Initialize;//應(yīng)用程序的初始化

Application.CreateForm(TForm1,Form1);//創(chuàng)建窗體Form1 Application.Run; //運(yùn)行程序end. //工程執(zhí)行部分的結(jié)束說明1.5.2單元文件

單元文件是

Delphi的核心文件,它的文件后綴是

.pas。在Delphi7中每個窗體都有一個單元文件與之相對應(yīng),窗體的單元文件包含了程序部分,用以控制窗體的行為。在一個工程中,還可以建立與窗體無關(guān)的單元文件,用來編寫工程中公用的函數(shù)、過程或定義新的數(shù)據(jù)。許多工程還調(diào)用了Delphi7附加庫或其單元文件中的過程或函數(shù)。uses子句中包含的公共單元文件包含了支持可視窗體及其控制的對象聲明。這些單元也包含了用于激活窗體的事件處理過程程序。(詳見本教程P20~P21)1.5.3窗體文件

窗體文件記錄設(shè)計時窗體和組件的屬性,它的文件后綴是

.dfm。一個或多個窗體文件,它們含有相應(yīng)的單元文件。dfm文件在

Delphi7下是一種腳本化的文本文件。在Delphi7中,一個應(yīng)用程序至少需要一個窗體??梢栽诖绑w上單擊鼠標(biāo)右鍵,選擇

【ViewasText】命令,窗體將在代碼編輯器中顯示為文本格式。

(代碼省略,詳見本教程P21~P22)1.5.4資源文件

資源文件中可以包含各種資源,用它可豐富應(yīng)用程序,它的文件后綴是

.res。編譯器可以把資源文件鏈接到可執(zhí)行文件里。資源文件的生成和編輯需要有專門的工具,如

Delphi7附帶的

ImageEditor,利用它就可以創(chuàng)建、打開、編輯和保存圖片資源。1.5.5其他文件后綴格式為如下形式:*.~pas:Delphi單元的備份文件;*.dof:Delphi中的有關(guān)配置和選項文件;*.dcu:Delphi的中間編譯單元文件;*.dpk:Delphi的包文件;*.dll:動態(tài)鏈接庫(Delphi可創(chuàng)建的一種終端文件);*.ocx:ActiveX控件(Delphi可創(chuàng)建的一種終端文件);

*.exe:可執(zhí)行文件(Delphi可創(chuàng)建的一種終端文件)。

1.6Delphi簡單應(yīng)用程序?qū)嵗?/p>

本節(jié)要創(chuàng)建一個簡單的應(yīng)用程序。啟動Delphi7程序,出現(xiàn)一個窗口,窗體標(biāo)題欄中顯示“演示程序”字樣,在窗體上顯示一行文字“歡迎使用Delphi7開發(fā)工具!”;單擊窗體中“測試”按鈕,彈出信息框告知“我成功了!”;單擊窗體中的“退出”按鈕,能夠退出應(yīng)用程序。通過設(shè)計一個簡單的應(yīng)用程序。掌握以下內(nèi)容:

應(yīng)用程序開發(fā)過程;

常用開發(fā)工具及功能;

應(yīng)用程序組成;

應(yīng)用程序編譯及執(zhí)行。

在Delphi7中開發(fā)的每個應(yīng)用程序都被稱為工程。Delphi7編程首先從創(chuàng)建一個新工程開始。創(chuàng)建新工程有以下兩種方法:

1.6.1建立用戶界面的對象(1)

新創(chuàng)建的工程中包含一個默認(rèn)窗體(Form1)和它對應(yīng)的單元(Unit1),根據(jù)工程的需要可添加窗體或單元。工程文件的擴(kuò)展名為.dpr。打開一個已建立的工程的方法是:單擊File菜單,指向OpenProject,然后選擇工程文件即可。⑴啟動Delphi7進(jìn)入開發(fā)環(huán)境,此時系統(tǒng)自動生成一個工程,默認(rèn)名為Project1;⑵選擇File菜單,指向New,然后單擊Application系統(tǒng)將創(chuàng)建一個新的工程。1.6.1建立用戶界面的對象(2)

程序設(shè)計首先是窗體設(shè)計。因此第一項工作就是在窗體設(shè)計器完成窗體設(shè)計,在窗體中添加各種所需對象進(jìn)行界面設(shè)計。將組件板上的組件添加到窗體上有三種方法。(1)單擊組件板上所需組件的按鈕,然后在窗體適當(dāng)位置拖動鼠標(biāo)畫出組件,即可將組件添加到窗體指定位置。(2)雙擊組件板上所需組件的按鈕,即可將組件添加到窗體中心位置。(3)按下Shift鍵不放,單擊組件板上所需組件的按鈕,所選擇組件出現(xiàn)藍(lán)色邊框,同時對象選擇按鈕彈起??梢栽诖绑w適當(dāng)位置連續(xù)畫出該類組件,用鼠標(biāo)單擊對象選擇按鈕,可以取消該類組件的連續(xù)添加操作。

本例中共涉及3個對象:1個TLabel組件和2個TBotton組件。Label組件用來顯示信息,不能用于輸入;Button組件用來執(zhí)行有關(guān)操作;窗體是上述對象的載體

1.6.1建立用戶界面的對象(3)

如果組件在窗體中的位置不合適,可以用鼠標(biāo)拖動的方法進(jìn)行移動,直到對所有組件的位置感到滿意為止。剛添加到窗體中的組件,其邊框上有八個黑色小方塊,表明它是當(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.6.2對象屬性設(shè)置(3)在

Delphi中,設(shè)置窗體和組件的屬性是通過對象檢查器實(shí)現(xiàn)的,對象檢查器是設(shè)計界面過程中最頻繁使用的工具。選中窗體上要設(shè)置屬性的組件,對象檢查器會顯示該組件的所有屬性,只需對要改變的屬性后面的值進(jìn)行修改就可以了。本例中,各組件的屬性設(shè)置:

組件名稱組件屬性屬性值說明Label1Caption空值使Label1中不顯示任何文字AutoSizeTrue使Label1大小隨里面的內(nèi)容變化和適應(yīng)Button1Caption測試在Button1按鈕上顯示指定文字Button2Caption退出在Button2按鈕上顯示指定文字1.6.3對象事件過程及編程(1)

建立了用戶界面并為每個對象設(shè)置了屬性后,就要考慮用什么事件來激發(fā)對象執(zhí)行所需要的操作。這涉及到選擇對象的事件和編寫事件過程代碼。為了在窗體上顯示“歡迎使用

Delphi7開發(fā)工具!”,同時改變窗體的標(biāo)題為“演示程序”,需對Form1窗體的OnCreate事件進(jìn)行編程。代碼如下:procedureTForm1.FormCreate(Sender:TObject);beginForm1.Caption:='演示程序';Label1.Caption:='歡迎使用

Delphi7開發(fā)工具!';end;1.6.3對象事件過程及編程(2)

為了實(shí)現(xiàn)單擊“測試”按鈕彈出對話框功能,需在Button1的OnClick事件中進(jìn)行編程。方法是:選擇Button1對象,在對象監(jiān)視器中選擇“事件”選項卡,在事件選項卡中選擇OnClick事件,雙擊事件處理欄,Delphi自動生成該事件過程的代碼框架,同時打開代碼編輯窗口,將光標(biāo)定位在代碼框架過程體的首行處,在過程體中加入如下代碼:ShowMessage('我成功了!');

輸入完畢可以看到按鈕Button1的鼠標(biāo)單擊事件處理程序的全部內(nèi)容是:procedureTForm1.Button1Click(Sender:TObject);begin

ShowMessage('我成功了!');

end;end.1.6.3對象事件過程及編程(3)同樣,輸入完畢的Button2按鈕的鼠標(biāo)單擊事件處理程序的全部內(nèi)容是:procedureTForm1.Button1Click(Sender:TObject);begin

Close;

end;end.1.6.4編譯、調(diào)試、執(zhí)行

Delphi是先編譯后執(zhí)行的程序,它不是解釋執(zhí)行的。所以一般可先使用菜單【Project】|【BuildAllProjects】進(jìn)行編譯程序,但更多的時候是直接使用菜單【Run】|【Run】來直接運(yùn)行一個程序,因為它會先編譯,如果沒錯誤再運(yùn)行。

程序運(yùn)行結(jié)果如圖1-16所示,當(dāng)出現(xiàn)一個名為Delphi7程序的窗口,單擊窗口上的顯示按鈕,顯示一行文字“第一個Delphi7程序”,單擊窗體右上方關(guān)閉按鈕時退出程序。在程序中除了語法錯誤,還有可能在程序運(yùn)行中出現(xiàn)錯誤,這就要涉及到程序的調(diào)試。Delphi7為程序員提供了方便的程序調(diào)試手段。圖1-15程序運(yùn)行結(jié)果1.6.5保存工程

當(dāng)程序調(diào)試完畢沒有任何問題時,還要注意保存程序??赏ㄟ^菜單【File】|【SaveAll】保存所有文件,也可以單個保存每一個要保存的文件。

打開Sample目錄可以發(fā)現(xiàn)有六個文件,分別是Main.dfm、Main.pas、Sample.cfg、Sample.dof、Sample.dpr、Sample.res。應(yīng)當(dāng)注意,一個應(yīng)用程序并不是只由一個文件組成,而是由許多不同類型的文件組成的。

OOPPascal基礎(chǔ)知識

內(nèi)容提要

OOPPascal基本知識

常用數(shù)據(jù)類型

運(yùn)算和運(yùn)算符常量和變量常用語句過程和函數(shù)2.1OOPPascal基本要素

Delphi是Borland公司推出的面向?qū)ο蟮目梢暬幊汰h(huán)境,特別適合于快速規(guī)范地開發(fā)Windows應(yīng)用程序。從Borland公司推出Delphi1.0至今,Delphi已經(jīng)發(fā)展了7代產(chǎn)品,每一代都是伴隨Windows操作平臺的升級而升級。使用Delphi,用戶可以輕松地進(jìn)行各種復(fù)雜應(yīng)用程序的開發(fā)。

2.1.1標(biāo)識符標(biāo)識符是用來標(biāo)識一個特定元素的,如類名、變量名、單元名、方法名等。利用標(biāo)識符可以完成對變量、常量、數(shù)據(jù)類型、過程、函數(shù)、類等的引用。ObjectPascal標(biāo)識符由字母、數(shù)字、下劃線組成,其規(guī)定為:(1)必須以字母或下劃線開始;(2)不能與保留字相同;(3)避免與ObjectPascal已經(jīng)使用的標(biāo)準(zhǔn)標(biāo)識符相同。2.1.2關(guān)鍵字

關(guān)鍵字又稱保留字(ReservedWords)是由系統(tǒng)規(guī)定的、具有特定意義的單詞。在編程時不能被重新定義或另作他用。ObjectPascal語言規(guī)定的保留字詳見本教程P28頁表2-1。

除了上述的保留字外,Private、Protected、Public、Published和Automated在定義對象類型時也作為保留字,而在其他場合則作為指令符。單詞at和on也具有特殊的含義。

注意:ObjectPascal編程語言和許多編程語言不同,它對單詞的大小寫是不敏感的。ObjectPascal不區(qū)分大小寫。IN、in和In都被看做是同樣的意義。2.1.3指示字

注意:

可以定義一個跟指示字完全相同的標(biāo)識符,但最好不這樣做。

指示字(directives)也是具有特殊意義的單詞,但與保留字不同的是可以將指令符定義為標(biāo)識符,ObjectPascal不會指示出錯,但這容易混淆。ObjectPascal規(guī)定的指令指示字見表2-2。2.2數(shù)據(jù)類型

OOPPASCAL語言是一種強(qiáng)類型語言,這表明每一個變量在賦值之前必須明確給出它的類型。即變量在訪問之前必須聲明。OOPPASCAL數(shù)據(jù)類型豐富,它允許使用17種類型的數(shù)據(jù)。其結(jié)構(gòu)如P31圖2-1所示。2.2.1簡單類型

OOPPASCAL中的簡單類型包括整形、字符型、布爾型、枚舉型、子界類型以及實(shí)數(shù)類型。

其中,整形、字符型、布爾型、枚舉型、子界類型統(tǒng)稱為順序類型(ordinaltypes)。在順序類型中,除了第一個元素,每一個元素都有唯一的前趨;除了最后一個元素外,每一個元素都有唯一的后繼。

1.整型

OOPPASCAL中將整數(shù)類型分為基本的(fundanmental)和一般的(generic)整數(shù)類型?;镜恼麛?shù)類型包括Shortint(短整型)、Smallint(小整型)、Longint(長整型)、Int64(64位整型)、Byte(字節(jié)型)、Word(字型)和Longword(長字型)。它們的取值范圍和格式如表2-4所示:表2-4基本整數(shù)類型類型范圍格式Shortint-127...1278位帶符號數(shù)Smallint-32768…3276716位帶符號數(shù)Longint-2147483648…214748364732位帶符號數(shù)Int64-2^63…2^63-164位帶符號數(shù)Byte0…2558位無符號數(shù)word0…6553516位無符號數(shù)Longword0…429496729532位無符號數(shù)2.字符型

字符類型也有基本類型和一般類型之分?;绢愋桶ˋnsiChar和WideChar兩種類型。其中,AnsiChar的格式為8位字節(jié),取值的序數(shù)按擴(kuò)展ANSI字符集排列;而WideChar的格式為16位字節(jié),是為兼容UniCode字符集而設(shè)置的,它的前256個UniCode字符同ANSI字符相同。一般的通用字符類型為Char,它等價于AnsiChar。由于字符型也屬于順序類型,可用函數(shù)Ord來取出字符的序數(shù),即Ord(‘A’)=65成立。也可用預(yù)定義的函數(shù)Chr來返回對應(yīng)的字符值,即Chr(65)=’A’成立。

3.布爾型

布爾型數(shù)據(jù)用于進(jìn)行邏輯運(yùn)算,布爾型數(shù)據(jù)的值只有兩個:True(真)和False(假)。ObjectPascal包括4種形式的布爾型數(shù)據(jù),詳見表2-7。表2-7ObjectPascal語言的布爾型類型名稱字節(jié)數(shù)取值布爾型Boolean1只能為False(0)或True(1)字節(jié)布爾型ByteBool1False或True(非False)寬布爾型WordBool2False或True(非False)長布爾型LongBool4False或True(非False)4.枚舉型

枚舉類型定義了一組值的順序集合。它們的次序根據(jù)標(biāo)識符的枚舉順序而定。在Delphi中廣泛使用了枚舉類型來定義組件對象的屬性。枚舉類型是一種用戶子定義類型,定義枚舉類型的語法如下:Type類型名稱(TypeName)=(值1,值2,值3,……,值n);如下是定義枚舉類型的例子:

TypeFruits=(Apples,Oranges,Bananas,Grapes);

在程序中定義好了枚舉類型后,可以象如下聲明變量:

VarMyFruit:Fruits;

5.子界類型子界類型也是一種用戶字定義類型,它規(guī)定了值域的上界和下界及取值的類型。字節(jié)類型必須是順序類型中某范圍的值,在想限制一個變量的取值范圍時,子界類型是非常有用的。子界類型的定義如下:Type類型名稱

=值域下界

值域上界;

定義子界類型必須注意以下幾點(diǎn):

上界和下界必須屬于順序類型,且為同一順序類型。

上界和下界的類型定義了子界的基類型。

上界的序號必須大于下界的序號。正確的定義舉例如下:

TypeSomeNumbers=0…15;

SomeCaps=‘A’…‘H’;

6.實(shí)型實(shí)數(shù)類型用于定義一個通常所說的浮點(diǎn)數(shù)所表示的數(shù)字的集合。它是屬于數(shù)據(jù)類型中的簡單類型,但已不屬于順序類型。實(shí)數(shù)類型也有基本類型和一般類型?;绢愋桶ǎ篟eal48、Single、Double、Extended、Comp和Currency;一般類型為:Real。詳細(xì)的格式及表示范圍如表2-6所示:

類型名表示范圍有效位占用內(nèi)存(字節(jié))Real48±2.9*10^-39~1.7*10^3811~126Single±1.5*10^-45~3.4*10^3874Double±5.0*10^-324~1.7*10^30815~168Extended±3.6*10^-4951~1.1*10^493219~2010Comp-2^63+1~2^63-119~208Currency-922337203685477.5808~922337203685477.580719~208Real±5.0*10^-324~1.7*10^30815~1682.2.2字符串類型字符串型是存儲字符串?dāng)?shù)據(jù)的類型。OOPPASCAL中提供的預(yù)定義類型如表2-7:

表2-7字符串類型類型名最大長度(字符)所需內(nèi)存用途ShortString2552~256B向后兼容AnsiString2314~2GB8位ANSI字符WideString2304~2GBUniCode注:在

Delphi5.0以后的程序中可直接定義String類型,其默認(rèn)為AnsiString類型(或者說是LongString類型),如果使用{$H-},則被解釋為ShortString類型。

2.2.3結(jié)構(gòu)類型

結(jié)構(gòu)類型包括:集合(Set)、數(shù)組(Array)、記錄(Record)、文件(File)以及類(Class)、類引用(ClassReference)、接口(Interface)等類型。它的實(shí)例中含有一個或多個值。

2.2.4指針類型指針是內(nèi)存中數(shù)據(jù)結(jié)構(gòu)的詳細(xì)地址,相當(dāng)于一個表示內(nèi)存地址的變量。指針類型聲明的一般形式為:

Type指針類型名

=^類型特殊符號

“^”

表明了是一個指針類型,其后面緊跟的類型確定了指針?biāo)赶虻念愋停梢允呛唵晤愋停缯?、?shí)型、枚舉等;也可以是結(jié)構(gòu)類型,如數(shù)組、集合、記錄等類型?!癪”還有另外一種含義,跟在指針類型的變量后面,表示具體的值。配合指針操作的還有符號“@”,它是取址運(yùn)算符,表示取地址操作。

2.2.5過程類型

過程類型變量相當(dāng)于指針的角色,它可指向一個過程或函數(shù),并且可以作為另一個過程或函數(shù)的參數(shù)使用。其定義的方式如下例:TypeTProcedure=Procedure;//聲明一個無參數(shù)過程類型TIntegerFunction=Function:Integer;//聲明一個無參數(shù)函數(shù)類型,返回值為整型TStringProcedure=Procedure(constS:String);//聲明一個帶有

String類型參數(shù)的過程類型VarProc:Tprocedure;IntF:TintegerFunction;StrP:TstringProcedure;2.2.6可變類型

用于標(biāo)識可變類型的保留字是Variant,Variant類對象本質(zhì)上是無類型變量,也就是它們可以自動顯現(xiàn)不同的類型。可變類型就是為了解決在編譯時數(shù)據(jù)類型無法確定的情況下,ObjectPascal才引入的數(shù)據(jù)類型??勺冾愋妥兞颗e例如下:VarX:Variant;S:String;BeginX:=10;S:=IntToStr(X+20);X:=‘ObjectPascal’;MessageDlg(X,mtConfirmation,mbYesNoCancel,0);End;2.3運(yùn)算和運(yùn)算符

運(yùn)算是對數(shù)據(jù)進(jìn)行加工處理的過程,描述各種不同運(yùn)算的符號稱為運(yùn)算符,而參與運(yùn)算的數(shù)據(jù)稱為操作數(shù)。表達(dá)式是表示某個求值規(guī)則的運(yùn)算公式,它由運(yùn)算符和圓括號將常量、變量等操作數(shù)以合理的形式組合而成。表達(dá)式可以用來執(zhí)行運(yùn)算、操作或測試數(shù)據(jù),每個表達(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)算符。本節(jié)介紹幾種常用的運(yùn)算和運(yùn)算符。2.3.1算術(shù)運(yùn)算

算術(shù)運(yùn)算的操作對象為整形或?qū)嵭?,算術(shù)運(yùn)算符包括

+,-,*,/,div和

mod,詳細(xì)說明如下表2-8:

表2-8OOPPASCAL語言的算術(shù)運(yùn)算符操作符操作操作數(shù)類型結(jié)果類型+加整形,實(shí)型整形,實(shí)型-減整形,實(shí)型整形,實(shí)型*乘整形,實(shí)型整形,實(shí)型/除整形,實(shí)型整形,實(shí)型Div整數(shù)除整形整形Mod取模整形整形

2.3.2布爾運(yùn)算

布爾運(yùn)算的操作對象的類型為布爾型,返回的結(jié)果值也是布爾類型。布爾運(yùn)算符基本有四個,分別是

Not,And,Or,Xor,其詳細(xì)說明如表2-9:

表2-9OOPPASCAL語言的布爾運(yùn)算符

操作符操作操作規(guī)則Not取反NotTrue=False;NotFalse=TrueAnd與(布爾乘)TrueAndTrue=True;AAndFalse=FalseOr或(布爾加)FalseOrFalse=False;AOrTrue=TrueXor異或AXorA=False;AXor(NotA)=True2.3.3邏輯運(yùn)算

邏輯運(yùn)算實(shí)現(xiàn)的是按位的運(yùn)算,它的操作及其操作的結(jié)果均為整數(shù),邏輯運(yùn)算的操作說明如下表2-10所示:

表2-10OOPPASCAL語言的邏輯運(yùn)算符

操作符操作操作舉例Not按位取反Not001101=110010And按位與001101And100001=000001Or按位或001101Or100001=101101Xor按位異或001101Xor100001=101100Shl左移13(001101)Shl2=52Shr右移13(001101)Shr2=32.3.4指針運(yùn)算指針運(yùn)算符及其說明如下表2-11:

表2-11OOPPASCA語言的指針運(yùn)算符

操作符操作操作數(shù)類型結(jié)果類型+加法字符指針、整數(shù)字符指針-減法字符指針、整數(shù)字符指針、整數(shù)∧取值指針指針基類型=相等指針布爾<>不等指針布爾2.3.5集合運(yùn)算

集合運(yùn)算是以集合類型作為操作數(shù)的,它的運(yùn)算符及其說明如下表2-12:

表2-12OOPPASCAL語言的集合運(yùn)算符

操作符操作結(jié)果類型+并集集合-差集集合*交集集合<=子集布爾>=父集布爾=相等布爾<>不等布爾In屬于布爾2.3.6關(guān)系運(yùn)算

關(guān)系運(yùn)算用于比較兩個操作數(shù),其返回值的類型是布爾型。關(guān)系運(yùn)算符的操作說明如下表2-13:

表2-13OOPPASCAL語言的關(guān)系運(yùn)算符

操作符操作操作數(shù)類型=相等簡單類型、類、類引用、接口、字符串、緊縮字符串<>不等簡單類型、類、類引用、接口、字符串、緊縮字符串<小于簡單類型、字符串、緊縮字符串、PChar>大于簡單類型、字符串、緊縮字符串、PChar<=不大于簡單類型、字符串、緊縮字符串、PChar>=不小于簡單類型、字符串、緊縮字符串、PChar2.3.7字符串運(yùn)算

操作符

+可以用作算術(shù)運(yùn)算符、指針運(yùn)算符和集合運(yùn)算符,還可以用作表示把兩個字符串類型的操作數(shù)相連接,即連接兩個字符串。例如:‘My’+‘String’=‘MyString’;

2.3.8取址運(yùn)算

取址運(yùn)算符@

,它返回變量、函數(shù)、過程或方法的地址。關(guān)于取址運(yùn)算符@,其原則說明如下:如果

X是變量,則

@X

返回

X的地址;在默認(rèn)的編譯指示{$T-}下,@X的類型為

Pointer;而在{$T+}狀態(tài),

@X的類型為

^T,其中的

T為

X的類型。如果F是一個過程或函數(shù),@F返回F的入口點(diǎn),它的類型一定是Pointer。

2.3.9運(yùn)算符的優(yōu)先順序在表達(dá)式中有多種運(yùn)算符時,要注意各個操作符之間的優(yōu)先級。通常情況下,先作括號里的運(yùn)算,再從優(yōu)先級由高到低的次序來做,同等優(yōu)先級的,按從左到右出現(xiàn)的順序處理。所以,在不清楚具體優(yōu)先級的情形下,可以使用括號,來確保程序的正確性。

表2-14OOPPASCAL中運(yùn)算符的優(yōu)先級

優(yōu)先級操作符最高@,Not次高*,/,Div,Mod,And,Shl,Shr,As次低+,-

,Or,Xor最低=,<>,<,>,<=,>=,In,Is2.4常量與變量

定義常量的目的基本上有兩種:其一,在程序中經(jīng)常用到某些常數(shù)值,為了書寫方便及減少頻繁輸入造成錯誤,可把它定義為一個常量;其二,就是為了便于程序的閱讀或修改,定義常量可使程序易于維護(hù)。

1.常量的聲明常量可以在程序、單元、過程或函數(shù)的聲明部分進(jìn)行聲明,常量在說明時就被賦予了一個值,在程序執(zhí)行過程中是不可改變的。

聲明常量的一般形式如下:Const

常量名1=常量值1;

常量名2=常量值2;

……

在程序設(shè)計中常用到兩種形式的數(shù)據(jù),一種是在程序執(zhí)行過程中其值保持不變的數(shù)據(jù),稱為常量;另一種是在程序執(zhí)行過程中其值可以改變的數(shù)據(jù),稱為變量。2.4.1常量2.類型常量類型常量主要是不能修改的只讀變量。在聲明常量時,直接聲明其常量類型。類型常量的聲明方法如下:

Const

常量名1:類型名=常量值1;

常量名2:類型名=常量值2;

……舉例如下:ConstWeekDays:Integer=7;DayInYear:Integer=365;2.4.1常量(2)2.4.2變量變量實(shí)際就是程序員在內(nèi)存中指定的一個帶有標(biāo)識符的地址空間,變量名則是這個指定內(nèi)存地址的標(biāo)識符,而變量的類型則確定了這個內(nèi)存地址中存的值什么樣是合法的或可能的,并且該內(nèi)存地址里的值是可以改變的。1.變量的聲明變量在使用之前,也必須先進(jìn)行聲明。聲明變量的保留字為Var,其聲明的一般形式如下:

Var

變量名1:類型名1;變量名2:類型名2;

……聲明變量舉例如下:

VarGz_Sum:Real;Value_1,Value_2:Integer;StrTitle:String;X:Variant;2.4.2變量2.變量的作用域變量的作用域是指它的可見性和生命期??梢娦允侵缚梢栽L問該變量的區(qū)域,生命期是指一個變量可以保持它的值和可見性的時間。在

Delphi7中,變量可以在程序、單元、函數(shù)或過程的聲明部分進(jìn)行聲明,聲明的位置則決定了變量的作用域。

聲明在過程或函數(shù)內(nèi)部的變量有時叫做局部變量,而在應(yīng)用程序開始聲明的變量叫做全局變量。全局變量可以在聲明時對它進(jìn)行初始化,格式為:

var<變量名>:<類型名>=<常量表達(dá)式>

其中常量表達(dá)式的值必須與變量定義的類型相兼容。2.4.2變量3.變量的強(qiáng)制類型轉(zhuǎn)換由于

Delphi的編譯器對各種類型的參數(shù)檢查是非常嚴(yán)格的,類型不匹配則通不過編譯器的編譯檢查,為通過編譯器的編譯檢查,經(jīng)常需要把一個變量的類型轉(zhuǎn)換為另一個變量類型。強(qiáng)制類型轉(zhuǎn)換就是一種技術(shù),通過它能使編譯器把一種類型的變量當(dāng)作另一種類型變量,由此來通過編譯器的編譯檢查。注:強(qiáng)制類型轉(zhuǎn)換要求兩種類型在內(nèi)存中存儲空間的大小必須相同,整數(shù)類型變量與實(shí)數(shù)類型之間不能進(jìn)行這樣的轉(zhuǎn)換,應(yīng)該通過預(yù)定義的標(biāo)準(zhǔn)函數(shù),如:Trunc()或Round()函數(shù)。

2.5OOPPASCAL中的語句

ObjectPascal中的語句可分為簡單語句和結(jié)構(gòu)語句兩種。簡單語句有賦值語句、空語句、跳轉(zhuǎn)語句(Goto語句)和過程語句;結(jié)構(gòu)語句有復(fù)合語句、條件語句、循環(huán)語句和

開域語句(With語句)。

語句的書寫規(guī)則⑴可以把多個語句放在一個程序行中,也可把一個語句分多行書寫⑵每個語句都必須以分號“;”結(jié)束。

⑶對于較為復(fù)雜的程序常用到復(fù)合語句,復(fù)合語句是指將多個語句用begin和end兩個保留字包圍起來,格式如下:begin<語句1>;…;<語句n>;end;復(fù)合語句在ObjectPascal中被視為一個語句,因此在end后必須2.5.1簡單語句1.賦值語句賦值語句用來顯式地給變量賦值,即用表達(dá)式的值取代變量的當(dāng)前值。賦值語句的一般形式如下:變量名

:=表達(dá)式

;如:MyNumber_1:=100;

2.空語句在

ObjectPascal中允許使用空語句,所謂空語句就是語句中沒有任何表達(dá)式的值和賦值符號,只有一個分號。

可參見P57例題。2.5.1簡單語句(2)

3.Goto語句和語句標(biāo)號

Goto語句可以將程序的執(zhí)行流程轉(zhuǎn)移到程序指定的某個位置,即轉(zhuǎn)移到其它語句處再繼續(xù)執(zhí)行。Goto語句必須借助語句標(biāo)號才可能使程序知道轉(zhuǎn)移的位置,ObjectPascal可以使用標(biāo)號(Labels)來標(biāo)識語句以提供Goto語句將跳轉(zhuǎn)的確切位置。Goto語句的一般形式如下:

Goto語句標(biāo)號;注:Goto語句所轉(zhuǎn)向的語句標(biāo)號必須和該語句同處于相同的程序段內(nèi),不能轉(zhuǎn)入或轉(zhuǎn)出一個過程或函數(shù),也不能轉(zhuǎn)入該程序段內(nèi)其它的循環(huán)結(jié)構(gòu)。

2.5.2復(fù)合語句

復(fù)合語句由若干個簡單語句或結(jié)構(gòu)語句構(gòu)成,在這些語句前后加入保留字Begin和End即可。其一般形式如下:

Begin

語句1;語句2;

……

語句n;

End;例如:把兩個變量的值進(jìn)行交換的復(fù)合語句如下:

BeginX:=Number_1;

Number_1:=Number_2;

Number_2:=X;

End;

2.5.3條件語句(1)

ObjectPascal語言提供的條件語句有兩種,即

If語句和

Case語句。

1.If語句

If語句需要計算一個表達(dá)式,并根據(jù)計算結(jié)果決定程序流程。If保留字后的表達(dá)式的值必須是一個布爾類型(Boolean)。其語句的一般形式如下:If<logicalexpression>Then<statement>;或語法中帶有Else子句,如:If<logicalexpression>Then<statement>Else<statement>;其中,<logicalexpression>是一個邏輯型的表達(dá)式,其值為Boolean類型。當(dāng)值為真(True)時,程序執(zhí)行保留字Then后的<statement>;當(dāng)值為假(False)時,程序則執(zhí)行保留字Else后的<statement>。兩種形式中的<statement>即可以是單語句也可以是復(fù)合語句。最后的“;”號代表著If語句的結(jié)束,所以在保留字Else之前不應(yīng)加有“;”號。

2.5.3條件語句(2)2.Case語句

Case語句的一般語法形式為:

Case選擇器表達(dá)式Of

情況常量表1:語句1;情況常量表2:語句2;

……

情況常量表n:語句n;

Else

語句

End;其中:選擇器表達(dá)式的值必須為順序類型(如整型、字符型、布爾型和子界型等)。情況常量列表中的值應(yīng)是選擇器表達(dá)式可能具有的值。由每一個情況常量列表列出的值在Case語句中必須是唯一的,相互間值的范圍也不允許有重疊部分。Else提供了如果所列出的情況都不出現(xiàn),應(yīng)執(zhí)行的語句,也就是說程序只能選擇一個執(zhí)行結(jié)果。根據(jù)需要也可以省略掉Else部分和它后面的語句。2.5.3條件語句(3)條件語句舉例:以例題2.2為例,用Case語句來代替If語句的實(shí)現(xiàn)。程序代碼如下:

CaseMarkOf90..100:ShowMessage('優(yōu)');80..89:ShowMessage('良');70..79:ShowMessage('中');60..69:ShowMessage('及格');0..59:ShowMessage('不及格');ElseShowMessage('輸入超出范圍');End;2.5.4循環(huán)語句(1)

在編程過程中遇到的好多問題是重復(fù)單調(diào)的。比如從1加到100,問題雖然簡單卻要重復(fù)操作。我們可以把這些重復(fù)的動作交給計算機(jī)去完成。引例:求1+2+3+……+100的值。

OOPPascal語言提供了三種循環(huán)語句,每一種可分別適合某一特定情況。這三種循環(huán)分別是:Repeat、While和For循環(huán)語句。

循環(huán)結(jié)構(gòu)只關(guān)心下面的三個要素:進(jìn)入循環(huán)結(jié)構(gòu)的條件是什么?在什么情況下結(jié)束循環(huán)過程?循環(huán)體內(nèi)部要完成的操作及在循環(huán)體內(nèi)如何改變循環(huán)條件?

2.5.4循環(huán)語句(2)

1.Repeat循環(huán)語句

Repeat循環(huán)語句是以Repeat開始,以Until結(jié)束。它可以重復(fù)執(zhí)行Repeat和Until之間的語句,直至Until后的表達(dá)式為真,則退出循環(huán)執(zhí)行其后的語句。Repeat循環(huán)語句的一般形式為:

Repeat

語句1;語句2;

……

語句n;

Until<邏輯表達(dá)式>;循環(huán)體2.5.4循環(huán)語句(3)

2.While循環(huán)語句While循環(huán)語句在多數(shù)場合下都可以代替Repeat循環(huán)語句,但與Repeat循環(huán)語句不同的是,它的布爾類型的表達(dá)式在While之后,即在循環(huán)剛開始處,所以While循環(huán)是先進(jìn)行判斷,再執(zhí)行循環(huán)語句。While循環(huán)語句的一般形式為:

While<邏輯表達(dá)式>Do<循環(huán)體語句>

其中,表達(dá)式必須是一個具有Boolean類型值的表達(dá)式。如果表達(dá)式的值為真(True)則執(zhí)行

Do后的循環(huán)體語句;如果表達(dá)式的值為假(False),則不執(zhí)行

While循環(huán)體而直接跳到

While循環(huán)體后再執(zhí)行其它語句。Do后的循環(huán)體語句,可以是簡單語句、復(fù)合語句或其它結(jié)構(gòu)語句。

2.5.4循環(huán)語句(4)

3.

For循環(huán)語句

For循環(huán)語句可以執(zhí)行一定的次數(shù),它需要一個循環(huán)變量來控制循環(huán)的次數(shù)。For循環(huán)語句有兩種形式:增量循環(huán)和減量循環(huán)。

增量循環(huán)

For語句的一般形式為:

For循環(huán)變量名:=初值

To終值

Do語句

減量循環(huán)

For語句的一般形式為:

For循環(huán)變量名:=初值

DownTo終值

Do語句其中,循環(huán)變量必須是一個順序類型的局部變量,也不允許帶有限定符。初值和終值的類型應(yīng)和循環(huán)變量的類型兼容。循環(huán)體中的語句可以是簡單語句、復(fù)合語句或結(jié)構(gòu)語句。

2.5.4循環(huán)語句(5)

3.

For循環(huán)語句

For循環(huán)語句可以執(zhí)行一定的次數(shù),它需要一個循環(huán)變量來控制循環(huán)的次數(shù)。For循環(huán)語句有兩種形式:增量循環(huán)和減量循環(huán)。

增量循環(huán)

For語句的一般形式為:

For循環(huán)變量名:=初值

To終值

Do語句

減量循環(huán)

For語句的一般形式為:

For循環(huán)變量名:=初值

DownTo終值

Do語句其中,循環(huán)變量必須是一個順序類型的局部變量,也不允許帶有限定符。初值和終值的類型應(yīng)和循環(huán)變量的類型兼容。循環(huán)體中的語句可以是簡單語句、復(fù)合語句或結(jié)構(gòu)語句。

2.5.4循環(huán)語句(6)

三種循環(huán)的比較以上三種循環(huán)都可用來實(shí)現(xiàn)循環(huán),它們的使用特點(diǎn)歸結(jié)為:如果知道循環(huán)執(zhí)行多少次的話,可以使用For循環(huán)語句結(jié)構(gòu)。For循環(huán)執(zhí)行速度快,效率高。如果不知道循環(huán)要執(zhí)行多少次,但至少會執(zhí)行一次的話,選用Repeat…Until循環(huán)語句結(jié)構(gòu)比較合適;當(dāng)認(rèn)為程序可能一次都不執(zhí)行的話,最好選用While…Do循環(huán)語句結(jié)構(gòu)。Break()過程和Continue()過程在While、Repeat或For三種的循環(huán)體中,可調(diào)用Break()過程,使得程序的執(zhí)行流程發(fā)生改變,即在循環(huán)體中當(dāng)某個條件成立時跳出循環(huán)體。如果想跳過循環(huán)體中部分代碼重新開始下一次循環(huán),調(diào)用Continue()過程。

2.6過程和函數(shù)一般來說每個程序都由若干個主要的任務(wù)構(gòu)成,每個主要任務(wù)又可分成若干個子任務(wù),這樣逐層細(xì)化,一直細(xì)化到每個子任務(wù)都只完成一個簡單的基本功能為止。

為此,可以把某些功能完全相同或非常相近的子任務(wù)單獨(dú)提取出來,劃分成程序的基本單元,其它程序可以重復(fù)調(diào)用。這樣做提高了編程效率,是程序更加規(guī)范化,也減少了代碼的出錯率。

函數(shù)和過程就是OOPPascal語言中的兩種子程序,它們可以隨時被調(diào)用。函數(shù)在執(zhí)行時將返回一個值,而過程執(zhí)行時不返回任何值。

2.6.1過程的聲明過程聲明的一般語法形式為:

procedure過程名(形式參數(shù)表);指令符;局部聲明:begin執(zhí)行語句

……end;在Delphi7的單元中聲明過程或函數(shù)時,只需要在單元內(nèi)聲明過程或函數(shù)頭部(可在單元的接口部分,也可在單元的實(shí)現(xiàn)部分),然后把光標(biāo)定位在頭部內(nèi),點(diǎn)擊鼠標(biāo)右鍵彈出快捷菜單,在該菜單中單擊【CompleteClassatCursor】菜單項即可。Delphi7會幫助完成自定義過程、函數(shù)或類的輸入。2.6.2函數(shù)的聲明函數(shù)聲明的一般語法形式為:

Function函數(shù)名(形式參數(shù)表):返回類型;指令符;局部聲明部分begin執(zhí)行語句……end;需要特別注意的是:函數(shù)必須有返回值,所以在函數(shù)聲明時要給出返回值的類型;而過程沒有返回值,聲明時也就沒有返回類型。

2.6.3過程和函數(shù)的調(diào)用1.過程調(diào)用調(diào)用過程的一般形式如下:過程名(實(shí)參數(shù)表);如果聲明的過程沒有形參,調(diào)用時便可以省略后面的實(shí)參表,其形式如下:過程名;2.函數(shù)的調(diào)用調(diào)用函數(shù)的一般形式如下:函數(shù)名(實(shí)參數(shù)表);在調(diào)用過程和函數(shù)時要注意:在過程與函數(shù)聲明的作用域內(nèi)才可調(diào)用該過程或函數(shù);調(diào)用過程或函數(shù)時還要注意有參數(shù)時,參數(shù)的類型一定要保持相同。2.6.4參數(shù)傳遞方式在上面的調(diào)用過程或函數(shù)時,程序?qū)褜?shí)參傳遞給形參,按傳遞方式的不同,OOPPascal中過程和函數(shù)的參數(shù)可分為:值參數(shù)、常量參數(shù)、變量參數(shù)和外部參數(shù)。1.值參數(shù)如果形式參數(shù)表中的參數(shù)前面沒有Const、Var或Out聲明的參數(shù),該參數(shù)則為值參數(shù)類型。

在OOPPascal中值參數(shù)是按“值傳遞”方式將實(shí)參的值傳送給形參的。值傳遞指的是在調(diào)用子過程語句被執(zhí)行時,帶實(shí)參值的調(diào)用語句將實(shí)參復(fù)制給子過程中的形參。所以要求實(shí)參的個數(shù)、數(shù)據(jù)類型與形參個數(shù)、數(shù)據(jù)類型完全匹配。2.6.4參數(shù)傳遞方式2.常量參數(shù)如果形式參數(shù)表中的參數(shù)前面有

Const聲明的參數(shù),該形式參數(shù)則為常量參數(shù)。常量參數(shù)在過程或函數(shù)中是絕對不允許改變的參數(shù)值,也不能再作為實(shí)參傳送給該過程或函數(shù)體中另一個過程或函數(shù)的變量形參。如果在一個過程或函數(shù)中其形參在執(zhí)行過程中不應(yīng)該改變其數(shù)值的話,那么就應(yīng)該使用一個常量參數(shù)。這樣可以保護(hù)形參而杜絕發(fā)生意外的情況。Delphi7系統(tǒng)

Sysutils中聲明的字符串比較函數(shù),如

CompareStr()函數(shù)中的形參就是常量參數(shù),它的首部如下:

FunctionCompareStr(ConstS1,S2:String):Integer;2.6.4參數(shù)傳遞方式3.變量參數(shù)如果形式參數(shù)表中的參數(shù)前面有

Var聲明的參數(shù),該形式參數(shù)則為變量參數(shù)類型。變量參數(shù)的參數(shù)傳遞方式為“地址傳遞”方式。地址傳遞指的是調(diào)用過程語句被執(zhí)行時,過程中的形參直接引用了調(diào)用語句中的實(shí)參。所以形參與實(shí)參實(shí)質(zhì)上是用同一個存儲單元。如果在子過程中修改了形參值,就會直接體現(xiàn)在實(shí)參上,在某些情況下,會造成負(fù)面影響。2.6.4參數(shù)傳遞方式4.外部參數(shù)如果形式參數(shù)表中的參數(shù)前面有

Out聲明的參數(shù),該形式參數(shù)則為外部參數(shù)類型。外部參數(shù)與變量參數(shù)一樣在實(shí)參與形參之間的值傳遞是按地址傳遞方式進(jìn)行的。但是使用時與變量參數(shù)有很大的區(qū)別。當(dāng)調(diào)用含有外部參數(shù)的過程或函數(shù)時,所引用的實(shí)參(變量)的初始值將被拋棄,該變量僅被用來作為一個容器來存儲過程或函數(shù)執(zhí)行的中間結(jié)果。在編寫應(yīng)用象COM、CORBA這樣的分布式對象模型的程序中,會經(jīng)常使用外部參數(shù)。

可視化組件的應(yīng)用

內(nèi)容提要

窗體與組件常用組件的使用3.1窗體與組件在Windows環(huán)境中,人機(jī)交互主要是在一些窗體和對話框中進(jìn)行的。在Delphi中,窗體指的就是窗口和對話框,進(jìn)行可視化程序設(shè)計一般就是從窗體開始并在窗體中完成的。窗體本身就是一個組件,它與其他組件不同的是:窗體像一個可以放置東西的容器,可以根據(jù)任務(wù)的需要在其上放置各種各樣的組件。窗體與組件的關(guān)系參見圖3-1。3.1.1窗體與組件的關(guān)系圖3-1窗體與組件3.1.2組件的公共屬性和事件

不同的組件具有不同的屬性、方法和事件,但有些屬性和事件是公共的,也就是它們雖然出現(xiàn)在不同的組件中但含義和使用方法相同。

1.常用的公共屬性(1)Action屬性。用來設(shè)置與菜單項相關(guān)的動作對象,可以通過動作列表編輯器來設(shè)置。(2)Align屬性。用于決定組件在窗體或上一級組件中的位置和尺寸。(3)Autosize屬性。用于決定組件是否隨其所包含內(nèi)容的大小而調(diào)整尺寸。(4)Caption屬性。用來設(shè)置組件的標(biāo)題。(5)Color屬性。用來設(shè)置組件的顏色。

(6)Cursor

屬性。用于設(shè)定當(dāng)鼠標(biāo)的光標(biāo)落入該組件的區(qū)域時鼠標(biāo)光標(biāo)的形狀。(7)Font

屬性。用于設(shè)置組件上所顯示的文字的字體。(8)Height

屬性和Width屬性。用于設(shè)置組件的高度和寬度。(9)Hint

屬性和ShowHint屬性。Hint屬性用于設(shè)置鼠標(biāo)在組件上停留是顯示提示信息的內(nèi)容;ShowHint屬性用于指定鼠標(biāo)在該組件上停留時是否顯示提示信息。(10)Left

屬性和Top屬性。指定該組件在窗體中的左上頂點(diǎn)的坐標(biāo)值。(11)Name

屬性。這是每個組件都具有的屬性,該屬性用于指明組件對象的名字,通過組件對象的名字來使用組件。(12)ParentColor

屬性。

ParentFont屬性和ParentShowHint屬性。當(dāng)這些屬性值設(shè)置為Ture時,組件使用它的上一級組件的同一屬性的設(shè)置植,這樣可以使程序保持一致的風(fēng)格。(13)PopUpMenu

屬性。用于指定當(dāng)右擊該組件時彈出時的彈出式菜單PopUpMenu的名字,此時這個彈出式菜單應(yīng)該已經(jīng)存在,PopUpMenu本身也是一個組件。(14)Text屬性。 用于指定文本類組件顯示的文本,類似于Caption屬性。(15)Visible屬性。決定組件是否可見。當(dāng)設(shè)置為True時,在運(yùn)行時可以看到該組件;設(shè)為False時運(yùn)行時不可見。2.常用的公共事件

onClick事件。鼠標(biāo)左鍵單擊某組件時觸發(fā)該事件。⑵

onDblClick事件。鼠標(biāo)左鍵雙擊某組件時觸發(fā)該事件。⑶

OnEnter事件和OnExit事件。

當(dāng)通過鼠標(biāo)單擊組件或Tab鍵跳轉(zhuǎn)到組件上時,該組件獲得焦點(diǎn),此時該組件的OnEnter事件被觸發(fā);該組件由焦點(diǎn)狀態(tài)轉(zhuǎn)為非焦點(diǎn)狀態(tài)時將觸發(fā)OnExit事件。⑷

OnMouseDown事件、OnMouseMove事件和OnMouseUp事件這是響應(yīng)鼠標(biāo)的一組事件。其中當(dāng)鼠標(biāo)在組件上被按下時觸發(fā)OnMouseDown事件;當(dāng)鼠標(biāo)在組件的顯示區(qū)域內(nèi)移動時觸發(fā)OnMouseMove事件;當(dāng)釋放了在組件區(qū)域內(nèi)按下的鼠標(biāo)鍵時觸發(fā)OnMouseUp事件。這三個事件不僅可以判斷鼠標(biāo)按下的是左、中、右鍵中的哪一個鍵,還可以判斷是否同時按下了Alt、Shift或Ctrl鍵。具體應(yīng)用請看下面章節(jié)的組件介紹。⑸OnKeyDown事件、OnKeyUp事件和OnKePress事件這是響應(yīng)鍵盤的一組事件。組件處于激活的焦點(diǎn)狀態(tài)時,按下了鍵盤上的鍵時將觸發(fā)OnKeyDown事件,返回的是按下鍵的鍵值,可以是復(fù)合鍵;釋放一個按下的鍵時將觸發(fā)OnKeyUp事件;鍵盤上的鍵一次完整地按下和釋放操作將觸發(fā)OnKeyPress事件。

3.2常用組件的使用Delphi封裝了大量的可視化組件,使程序員能夠在拖拖放放中輕松地設(shè)計程序界面。Delphi中提供的【Standard】、【Additional】和【W(wǎng)in32】三個標(biāo)簽頁放置基本組件。這些組件都是任何程序設(shè)計必不可少的。本節(jié)將詳細(xì)介紹常用組件的使用方法。3.2.1Label組件

Label(標(biāo)簽)組件在Standard標(biāo)簽頁中,主要用于在窗體中顯示提示信息,常與Edit組件一起使用,是顯示文本的主要組件。其特殊屬性有:1.Autosize屬性 該屬性用來判斷Label(標(biāo)簽)組件是否隨Caption屬性值自動調(diào)整大小。如果該屬性值為True,則Label的長度隨著Caption屬性值自動調(diào)整大小;如果該屬性值為False,則Label保持設(shè)計時定義的大小不變,此時,若標(biāo)題太長,則只能顯示部分內(nèi)容。2.Caption屬性 該屬性用來設(shè)置在標(biāo)簽上顯示的文本。3.Wordwrap該屬性 該屬性用于設(shè)置Caption屬性的顯示方式。缺省為False,表示標(biāo)簽上的標(biāo)題(提示信息)不能自動換行;如果該屬性為True,則標(biāo)簽將在垂直方向變化大小,以使其與顯示的文本相適應(yīng),而水平方向的大小不變。但若想使該屬性起作用,還必須將Autosize屬性設(shè)為True。4.Layout該屬性 該屬性可以改變文本在標(biāo)簽中的位置。5.Transparent該屬性 該屬性決定標(biāo)簽的背景是否透明。其值為True時,透明,即標(biāo)簽不會擋住它下面的組件。默認(rèn)值為False。3.2.2Edit組件

Edit組件在Standard標(biāo)簽頁中,也稱編輯框組件是Windows程序中常用的組件,它主要用于輸入單行文字。Edit組件的常用屬性有:1.AutoSelect屬性

該屬性確定當(dāng)編輯框獲得輸入焦點(diǎn)時,編輯框中的文字是否自動被選中。2.AutoSize屬性該屬性確定編輯框是否隨字體變化而自動變動尺寸,缺省為True。3.BorderStyle屬性該屬性確定Edit控件是否有邊框。4.CharCase屬性該屬性設(shè)置文本框內(nèi)字符的大小寫,其值為:ecLowerCase,全部轉(zhuǎn)換為小寫;ecNormal,不轉(zhuǎn)換;ecUpperCase,全部轉(zhuǎn)換為大寫。5.HideSelection屬性該屬性決定當(dāng)輸入焦點(diǎn)從Tmemo組件移走后,編輯框內(nèi)原來被選中的文本是否依然保持選中狀態(tài)。其設(shè)置為True,不保持;其值為False,保持。該屬性的默認(rèn)值為True。6.MaxLength屬性該屬性確定編輯框最多可以輸入的字符數(shù),缺省值為0,表示可以輸入任意多的字符;如果該屬性不為0,只能向編輯框中輸入小于或等于設(shè)定值的字符數(shù)。7.Modified屬性該屬性確定編輯框中的內(nèi)容自建立以來或者M(jìn)odified屬性最后一次被設(shè)置為False之后是否被修改。8.PasswordChar屬性該屬性在一些編輯框組件如TMaskEdit、TDBEdit中都有。缺省時該屬性為#0,即沒有掩碼。用戶可以自己設(shè)置一個掩碼,如‘*’,則用戶在編輯框中輸入的字符都將以‘*’字符顯示,而隱藏真實(shí)的字符。9.Text屬性該屬性用于顯示和保存編輯框中的內(nèi)容。10.ReadOnly屬性該屬性確定程序運(yùn)行時,用戶是否可以改變編輯框中的內(nèi)容。若為True,表示編輯框是只讀的,其內(nèi)容不可以編輯修改。11.SelLength屬性該屬性可以返回在編輯框中被選中的文本的長度。12.SelStart該屬性該屬性確定在編輯框中被選中文本的起始位置(第一個字符的序號為0)。13.SelText屬性該屬性用來設(shè)置或指示選中的文本。

Edit組件的主要方法方法說明Clear使用該方法可以清除文本框中的文本內(nèi)容。CanFocus該方法用來測試Memo控件是否可以接受焦點(diǎn)。如果其值為False,則控件不能接受焦點(diǎn);反之可以接受焦點(diǎn)。ClearSelection該方法將刪除Memo框中被選中的文本。如果在Memo控件中沒有被選擇的內(nèi)容,那么該方法不刪除任何東西。CopyToClipboard使用該方法可以將文本框中選中的內(nèi)容復(fù)制到剪切板中。CutToClipboard使用該方法可以將文本框中選中的內(nèi)容剪切到剪切板中。PasteFromClipboard使用該方法可以將剪切板中的內(nèi)容粘貼到文本框中。SelectAll使用該方法將選中文本框中的所有內(nèi)容。

Edit組件常用的幾個事件有:OnChange、OnKeyPress、OnEnter事件。Edit組件的常用事件

事件說明OnChange當(dāng)編輯框中的內(nèi)容發(fā)生變化時,觸發(fā)該事件,它是Edit中最常用,也是最有用的事件之一。OnKeyPress當(dāng)按下一個按鍵時,觸發(fā)該事件。OnEnter編輯框獲得輸入焦點(diǎn)時,觸發(fā)該事件。3.2.3Memo組件Memo組件在Standard標(biāo)簽頁中,Memo組件為用戶提供了一種處理多行文本的方法,還可用它快速地閱讀文件中的數(shù)據(jù),而且讀取和保存文本的最大長度可達(dá)255KB。

Memo組件的屬性

Memo組件的屬性、方法和事件與Edit組件大致相同。其特有的幾個屬性有:1.Lines屬性按行處理文本。2.ScrollBars屬性該屬性用來設(shè)置備注框是否出現(xiàn)滾動條以及滾動條的種類。3.WordWrap屬性該屬性用來決定當(dāng)輸入的文本到達(dá)右邊界時是否插入軟回車,以便換到下一行再輸入。3.2.3Memo組件Memo組件的方法⑴

使用剪貼板(Clipboard)

Memo組件同Edit組件一樣,也可使用CutToClipboard、CopyToClipboard和PastFromClipboar這三種方法,實(shí)現(xiàn)將Memo組件中被選擇文本剪切或復(fù)制到剪貼板上,以及將剪切板上的內(nèi)容粘貼到Memo組件中。 將Memo中的選中文本剪切到剪貼板的語句如下:

ifMemo1.SelLength>0then Memo1.CutToClipboard;2.文本的添加(Add方法)

利用Lines屬性,可以增加、刪除一行文本,也可以移動一行文本。下面的代碼將文本添加到Memo中的最后一行:

Memo1.Lines.Add(‘在Memo1的最后添加一行文本’);3.文件的保存和裝載(LoadFile方法、SaveToFile方法)

Memo1.Lines.LoadFile(Opendialog1.FileName)

可以將Memo組件中的文本保存成文本文件,也可以將文本文件裝載到Memo中。這需要配合使用SaveDialog組件和OpenDialog組件。將Memo中的文本保存為文本文件的語句為:

ifSaveDialog1.Executethen//打開保存

Memo1.Lines.SaveToFile(SaveDialog1.FileName);

以上語句先打開保存對話框,然后將Memo中的文本保存對話框到一個文件中,文件名為我們在SaveDialog中輸入的文本。在Memo中裝載文本文件的語句為:

ifOpendialog1.ExecutethenMemol.Lines.LoadFile(Opendialogl.FileName);

3.2.4MaskEdit組件

MaskEdit組件在Additional標(biāo)簽頁中,MaskEdit組件(也稱掩碼編輯框)是一種特殊的編輯框,它的主要屬性是EditMask。使用它

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論