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