淺談Delphi 7下VCL組件屬性
屬性是組件元素,它用來(lái)控制組件操作,很多組件都具有相同的屬性,例如,所有可視化組件都有Top和Left屬性,這兩個(gè)屬性不但在設(shè)計(jì)階段控制組件在窗體上的位置,在運(yùn)行時(shí)間也一樣。所有的組件都有Owner屬性,VCL用此屬性來(lái)跟蹤子窗體組件的父窗體或者跟蹤擁有子組件的組件。
一、屬性和Object Inspector
一個(gè)圖形比數(shù)千字的文字說(shuō)明強(qiáng)好多倍,默認(rèn)情況下啟動(dòng)Delphi 7 ,會(huì)看到一個(gè)空白窗體和它的Object Inspector,如下圖:
Tip
一般情況下我們不希望以開(kāi)啟Delphi7就自動(dòng)創(chuàng)建一個(gè)空白Application,我們可以通過(guò)在Delphi7的快捷圖標(biāo)中設(shè)置,讓它默認(rèn)不創(chuàng)建空白窗體:
1、在Delphi7的快捷圖標(biāo)上點(diǎn)擊右鍵菜單選擇【屬性】,打開(kāi)屬性對(duì)話(huà)框;
2、在其中的“目標(biāo)”中最后輸入“-np”,代表不創(chuàng)建工程。
當(dāng)啟動(dòng)Delphi后,Object Inspector的大小要基于當(dāng)前屏幕的分辨率,一般喜歡使Object Inspector達(dá)到屏幕允許的最大高度,這樣一次就可以最大限度地查看屬性。點(diǎn)擊Properties標(biāo)簽,就會(huì)顯示當(dāng)前選中組件的屬性,組件屬性是按字母順序排列的。
每個(gè)屬性都有一個(gè)與之有關(guān)的基本數(shù)據(jù)字段,但屬性本身不是類(lèi)數(shù)據(jù)字段,改變屬性常導(dǎo)致幕后的代碼運(yùn)行。
New Term
屬性常系于存取方法(access methods),當(dāng)屬性被修改時(shí),此存取方法就要執(zhí)行。
二、改變屬性值
在設(shè)計(jì)階段,屬性是可以改變的,并且在運(yùn)行階段它也是可以改變的。不論在哪種情況下,如果此屬性有一個(gè)存取方法,當(dāng)屬性被修改時(shí),此存取方法就會(huì)被調(diào)用和執(zhí)行。您可以試著在Object Inspector中改變窗體TForm的Left屬性并觀察窗體在屏幕上的運(yùn)動(dòng),這個(gè)就是一個(gè)在設(shè)計(jì)階段改變屬性的示例。
這就是VCL強(qiáng)大功能之一,在Delphi中使用它的方法為:可以不停地觀看設(shè)計(jì)改變的屏幕結(jié)果,但不是所有的屬性在設(shè)計(jì)階段都能在窗體上顯示可視變化。
要改變運(yùn)行階段屬性,只需簡(jiǎn)單地給屬性賦值就可以了。當(dāng)給屬性賦值時(shí),VCL將幕后調(diào)用這個(gè)屬性的存取方法。為了改變運(yùn)行階段Left屬性,代碼如下:
Left := 200;
就Left屬性而言,VCL將移動(dòng)和重畫(huà)此窗體。
New Term
屬性存取說(shuō)明符(Property Access Specifiers),屬性有兩個(gè)存取說(shuō)明符,在讀取和修改屬性時(shí)就會(huì)用它們,這就是讀說(shuō)明符(read specifier)和寫(xiě)說(shuō)明符(write specifier)。
當(dāng)讀或?qū)憣傩詴r(shí),與之相關(guān)的方法就會(huì)自動(dòng)被調(diào)用。在前面的例子中,當(dāng)給屬性賦值時(shí),就在存取一個(gè)寫(xiě)說(shuō)明符。實(shí)際上,VCL檢查寫(xiě)說(shuō)明符是否存在存取方法,如果存在,就會(huì)調(diào)用其存取方法,若存取方法不存在,VCL將給與此屬性有關(guān)的數(shù)字段賦一個(gè)新值。
當(dāng)引用一個(gè)屬性時(shí)(把屬性放在等號(hào)右邊),就會(huì)存取讀說(shuō)明符:
X := Form1.Left;
在這種情況下,VCL調(diào)用讀說(shuō)明符來(lái)讀取Left屬性的值,在很多情況下,讀說(shuō)明符都會(huì)返回屬性的當(dāng)前值。
三、屬性的性質(zhì)
屬性的屬性是由組件編寫(xiě)者決定的,一個(gè)屬性可以是只讀的,一個(gè)只讀屬性只能被讀取——它的值也可以被檢查——但不能寫(xiě),換句話(huà)說(shuō),可以獲取屬性的值,但不能改變它的值,在極少情況下,屬性是只寫(xiě)的(一個(gè)只能寫(xiě)而不能讀的屬性在大部分情況下是沒(méi)有意義的),他顯然與只讀屬性是對(duì)立的。
最后,還有一些屬性只能在運(yùn)行階段聲明,一個(gè)唯運(yùn)行階段聲明的屬性只能在運(yùn)行階段存取而不能再設(shè)計(jì)階段存取,因?yàn)槲ㄟ\(yùn)行階段屬性在設(shè)計(jì)階段不能用,它在Object Inspector上不能顯示,唯運(yùn)行階段屬性也可以聲明成只讀屬性,這意味著只有要運(yùn)行階段才能存取它,并且只能讀。
四、屬性類(lèi)型
有些屬性用VCL類(lèi)的一個(gè)實(shí)例作為其基本數(shù)據(jù)字段,例如,Delphi組件選項(xiàng)板上的Standard標(biāo)簽中的Memo組件的Line屬性,如下:
Note
省略號(hào)按鈕表示此屬性可以用屬性編輯器編輯。通過(guò)點(diǎn)擊省略號(hào)按鈕或雙擊屬性值,就可以帶出屬性編輯器。
Memo組件的Line屬性是TStrings類(lèi)的一個(gè)實(shí)例,當(dāng)雙擊Value欄時(shí),就會(huì)顯示字符串編輯器,此時(shí)可以輸入應(yīng)用程序運(yùn)行時(shí)想要在Memo組件中顯示的字符串。
Font屬性也是VCL類(lèi)的一個(gè)實(shí)例,字體包括字體名稱(chēng)、顏色和字體大小等內(nèi)容。注意在屬性Font前面有一個(gè)加號(hào),這表示這個(gè)屬性有一些可分別設(shè)置的子屬性。雙擊Font屬性名,就會(huì)擴(kuò)展開(kāi)來(lái),如下:
有些屬性是集合,例如Font屬性中的Style屬性就是集合。Style前面也有一個(gè)加號(hào),雙擊就會(huì)看到Style中的內(nèi)容。一個(gè)集合可以是空集或者是包含一個(gè)或多個(gè)值。
有些屬性可以是枚舉類(lèi)型的,即一個(gè)所有可能選擇的清單。枚舉類(lèi)型和集不一樣,只有一個(gè)選項(xiàng)可以選擇,集可以包含空集或者任意數(shù)目的選擇項(xiàng)。例如Cursor屬性就是一個(gè)很好的例子,如下:
運(yùn)行Delphi 7,新建一個(gè)Application,然后花些時(shí)間來(lái)體驗(yàn)一些不同組件和它們的屬性。
屬性規(guī)則
屬性表現(xiàn)像一個(gè)類(lèi)字段,并且可以像類(lèi)字段一樣存取。
屬性不是類(lèi)字段,它是特殊的類(lèi)成員。
當(dāng)寫(xiě)屬性時(shí)(給屬性賦值),屬性經(jīng)常調(diào)用一個(gè)存取方法,但并不總是遮掩個(gè),這樣一來(lái)此具體組件是怎么被寫(xiě)的。
公布的(published)屬性通常有缺省值,一個(gè)組件第一次啟用時(shí),其缺省值就是Object Inspector中初始顯示的值,并且如果沒(méi)有特別的賦值,它就用這個(gè)值。
屬性可以被設(shè)計(jì)成讀/寫(xiě)、只讀和只寫(xiě)。
唯運(yùn)行階段屬性在Object Inspector中不顯示,并且只能在運(yùn)行階段修改。
屬性類(lèi)型包括簡(jiǎn)單數(shù)據(jù)類(lèi)型、字符串、數(shù)組、集合、枚舉和VCL類(lèi)對(duì)象。
原文鏈接:http://www.cnblogs.com/pchmonster/archive/2012/01/09/2316952.html
【編輯推薦】