第二章Delphi物件導向的程式設計方法一

2021-03-04 09:54:06 字數 4773 閱讀 6943

delphi的程式語言是以pascal為基礎的。pascal語言具有可讀性好、編寫容易的特點,這使得它很適合作為基礎的開發語言。同時,使用編譯器建立的應用程式只生成單個可執行檔案(.

exe),正是這種結合,使得pascal成為delphi這種先進開發環境的程式語言。

本章中,我們將討論object pascal的主要特點,並講解如何在事件處理過程和其他應用程式中,使用它來編制程式**。本章將講解delphi應用程式中最常用的object pascal語法,而不是pascal語言的一切細節。如果您完全不熟悉pascal程式設計,請參閱一些基礎的pascal教程。

如果您具有程式設計經驗,並能熟練地使用其他流行程式語言,您將在本章的object pascal中發現一些相同的概念。如果您已經熟悉了borland pascal,就可以快速瀏覽或跳過本章。

2.1 編寫object pascal程式**

在前邊的章節中,我們通過例程,已經編寫了幾行簡單的**。在本章中,我們將從熟悉pascal程式設計的角度,配合例項,講解object pascal程式設計的基本方法。

在編寫自己的object pascal程式時,要注意程式的可讀性。pascal語言是英式結構語言,在程式中選擇合適的縮排、大小寫風格,並在需要時將程式**分行,會使得程式**能夠很容易地被自己和他人讀懂。一般的程式設計師都有這樣的體驗:

如果不給程式加上適當的註解,一段時間後,自己也難以理清程式的流程。給程式及時地加上注釋是良好的程式設計習慣。delphi的注釋需要加註在{}之間,編輯器會把它們處理成為空白。

delphi保留了borland pascal編輯器的風格,關鍵字採用黑體字,被注釋的部分會變暗,這使得程式設計風格良好,易讀易寫。

2.1.1 編寫賦值語句

在事件處理過程中,最常用到的工作就是把乙個新值賦給乙個屬性或變數。在設計使用者介面時,可以使用object inspector(object inspector)來改變其屬性;但有時需要在程式執行時改變屬性的值,而且有些屬性只能在執行時改變,這些屬性在delphi的**幫助的「proprety」主題中被標為執行期屬性。進行這種改變,就必須使用賦值語句。

下文的賦值語句表徵乙個onclick事件。當按鈕按動後,將編輯框部件edit1的color屬性置為clred:

procedure tform1.button1click(sender: tobject);

begin

:= clred;

end;

當按動按鈕後賦值語句被執行,編輯框變成紅色。

在語句中,部件的名稱在屬性前,中間用「.」表示屬性的所屬關係。這樣就準確地指定了要將clred值賦給哪一部件的哪一屬性。

賦值號為「:=」,不論給屬性還是給變數賦值,都是將右邊的值賦給左邊的屬性或變數。

當將乙個屬性值、變數、常量或文字資料賦給屬性或變數時,所賦值的型別和接受此值的屬性或變數的型別應相同或相容。乙個屬性或變數的型別定義了此屬性或變數的可能值集合,也定義了程式**可以執行的運算。在前邊的例程中,編輯框部件的color屬性和clred的型別都是tcolor。

可以在**幫助中找到乙個屬性的型別;另外一種方法是在object inspector中選定該屬性值段,並按下f1鍵,則型別將在屬性說明的結尾處列出,例如color屬性列出下邊的語句:

property color : tcolor;

有些屬性是唯讀(read only)的,它們只能被讀取,不能被改變。請查閱**幫助,在delphi中這些唯讀屬性都有註解。

2.1.2 識別符號的說明與使用

識別符號是delphi應用程式中一些量的名稱,這些量包括變數(var)、常量(const)、型別(type)、過程(procedure)、方法(method)及其他,object pascal 在應用識別符號時,必須首先說明它們。object pascal是強型別語言,它的編譯器可以檢查確保賦給變數或屬性的值是正確的型別,以便於您改正錯誤。因為object pascal是編譯語言,所以delphi的執行速度要比使用解釋語言快得多。

在使用識別符號前說明它們,可以減少程式錯誤並增加**的效率。

2.1.2.1 變數

變數是程式**中代表乙個記憶體位址的識別符號,而此位址的記憶體內容在程式**執行時可以被改變。在使用變數前必須對它進行說明,即對它進行命名,並說明它的型別。在所有變數說明以前加上保留字var。

變數說明左邊是變數的名稱,右邊則是該變數的型別,中間用(:)隔開。

varvalue ,sum : integer;

line : string;

在窗體中加入乙個名稱為edit1的編輯框,再加入乙個名稱(屬性name)為add的按鈕部件,並建立如下的事件處理過程:

procedure tform1.addclick(sender: tobject);

varx , y: integer;

begin

x := 100;

y := 20;

edit1.text := inttostr(x + y);

end;

在本例中,當按動add按鈕時,編輯框中顯示值120。在object pascal中,必須確保變數或屬性被賦予型別相同或相容的值。您可以嘗試將賦給x的值改為100.

0,或去掉inttostr函式,在編譯時會出現型別不匹配的錯誤,這也說明了object pascal強型別語言的特點。

2.1.2.2 預定義型別

object pascal有多個預定義的資料型別,您可以說明任何這些型別的變數:

整形:integer的範圍是-32768到32767,佔2位元組的記憶體;shortint從-128到127,佔1位元組記憶體;longint從-2147443648到2147483647 佔4位元組記憶體;byte從0到255,佔1位元組;word從0到65535,佔2位元組記憶體。它們都是沒有小數部分的數字。

實型:single可以包含7到8位有效小數部分,占用4位元組的記憶體;double類可以包含15到16位有效小數部分,占用8位元組的記憶體;extended型別包含19到20位有效小數部分,占用10位元組記憶體;***p可以包含19到20位有效小數部分,占用8位元組記憶體。以上實數型別只有在8087/80287選項[n+]開啟才可以使用。

real可以包含11到12位有效小數部分,占用6位元組記憶體。它只有在和以前borland pascal相容的情況下才使用,否則應使用double或extended。

布林型:boolean,只包含true或false兩個值,占用1位元組記憶體。

字元型:char,乙個ascii字元;字串型別string一串最長可達255個ascii字元。

指標型:pointer,可以指向任何特定型別。

字串型:pchar,是乙個指向以零結尾的字串的指標。

除了預定義型別外,delphi還有自行定義的型別。上述例程的tcolor就是這種型別。此外,使用者還可以定義自己的資料型別,這部分內容將在下文中詳細講述。

整型類別和實型類別都各有五種型別,同一類別中,所有的型別與其他同類別的都相容,您可以將一種型別的值賦給相同類別中不同型別的變數或屬性,而只需要這個值的範圍在被賦值的變數或屬性的可能值範圍內。例如,對於乙個shortint型的變數,可以接受在-128到127範圍內的任意整數,例如shortint型別的7;您不能將300賦給它,因為300已經超出了shortint的範圍了。將範圍檢查功能開啟(選用options|project,並在***piler options page中選擇range checking),將會檢查出乙個範圍錯誤;如果range checking沒有被開啟,那麼程式**將可以執行,但被賦值的值將不是您期望的值。

在一些情況下,您可以進行不同型別的變數或屬性的賦值。一般來說,可以將乙個較小範圍的值賦給乙個較大範圍的值。例如,您可以將整型值10賦給乙個接受實型值的double屬性而使得值成為10.

0,但如果將乙個double型別的值賦給整形變數,則會出現型別錯誤。如果您不清楚型別的相容性,可以參閱delphi的**幫助中「type ***patibility and assignment ***patibility」主題。

2.1.2.3 常量

常量在說明時就被賦予了乙個值,在程式執行過程中是不可改變的。下面的例子說明了三個常量:

const

pi = 3.14159;

answer = 342;

productname = "delphi";

象變數一樣,常量也有型別。不同的是,常量假設其型別就是常量說明中其所代表的值的型別。上文的三個常量的型別分別是real型、整形、字串型。常量用「= " 表示兩邊的值是相等的。

2.1.3 過程與函式

過程與函式是程式中執行特定工作的模組化部分。delphi的執行庫包含許多過程與函式以供您的應用程式呼叫。您不必了解過程與函式的邏輯,但要知道過程與函式的用途。

在物件中說明的過程和函式稱為方法(method)。所有的事件處理過程都是過程,以保留字procedure開頭。每乙個事件處理過程只包含了當這一事件發生時需要執行的程式**。

在事件處理過程中使用delphi已經存在的過程與函式,只需在程式**中呼叫它們即可。

2.1.3.1 乙個呼叫delphi方法的簡單例程

下文將通過對乙個memo部件的文字進行剪下、拷貝、貼上、清除等編輯的應用程式編制,介紹使用delphi過程和函式的呼叫方法。

memo(備註)部件有乙個cuttoclipboard方法,實現將使用者在memo中選擇的文字移到剪貼簿上去。由於這個功能已經被建立在此方法中了,所以您只需知道這個方法做什麼以及如何使用它即可。

下面的語句表明如何呼叫乙個名為memo1的memo部件的cuttoclipboard方法:

memo1.cuttoclipboard;

通過指定memo1的名稱,說明呼叫哪乙個部件的cuttoclipboard方法。如果不指明物件名稱,delphi會顯示unknown identifier錯誤。當該事件處理過程被觸發,程式會執行cuttoclipboard中的語句,將memo1中的文字剪貼到剪貼簿上去。

第3章 物件導向的程式設計基礎

物件導向程式設計 object oriented programming 是目前主流的程式設計方法,它已經基本替代了1970年代初期發展的 結構化的 基於過程的程式設計技術。j a語言是一種完全的物件導向的程式語言,它全面支援物件導向的程式設計方法。所謂物件導向 object oriented 簡稱...

第二章總結

第二章化學物質及其變化複習提綱 第一節物質的分類 一 簡單分類法及其應用 樹狀分類法 交叉分類法 二 分散系及其分類 分散系 1 定義 一種 或多種 物質以粒子形式分散在另一種 或多種 物質中所得到的體系。2 組成 分散成微粒的物質 分散質 微粒分布在其中的物質 分散劑 3 分類 膠體 1 膠體的本...

第二章小結

第二章隨機變數及其分布 第一節隨機變數的概念 一 隨機變數概念的引入 為全面研究隨機試驗的結果,揭示隨機現象的統計規律性,需將隨機試驗的結果數量化,即把隨機試驗的結果與實數對應起來.1.在有些隨機試驗中,試驗的結果本身就由數量來表示.2.在另一些隨機試驗中,試驗結果看起來與數量無關,但可以指定乙個數...