?? 048.htm
字號(hào):
<p>4. </font><font face="宋體" lang="ZH-CN" size="3">定義部件屬性</p>
<p> ⑴</font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">屬性的聲明</p>
<p> 聲明部件的屬性,你要描述:</font><font face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ●</font><font size="3"> </font><font
face="宋體" lang="ZH-CN" size="3">屬性名</p>
<p> </font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">●</font><font
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">屬性的類(lèi)型</p>
<p> ●</font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">讀和設(shè)置屬性值的方法</p>
<p> </p>
<p> 至少,部件屬性應(yīng)當(dāng)定義在部件對(duì)象聲明的</font><font
face="Arial" size="3">public</font><font face="宋體" lang="ZH-CN" size="3">部分,這樣可以在運(yùn)行時(shí)很方便地從外部訪問(wèn);為了能在設(shè)計(jì)時(shí)編輯屬性,應(yīng)當(dāng)將屬性在</font><font
face="Arial" size="3">published</font><font face="宋體" lang="ZH-CN" size="3">部分聲明,這樣屬性能自動(dòng)顯示在</font><font
face="Arial" size="3">Object Inspector</font><font face="宋體" lang="ZH-CN" size="3">窗口中。下面是典型的屬性聲明:</p>
<p> </p>
<p> </font><font face="Arial" size="3">type</p>
<p>TYourComponent=class(TComponent)</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">…</font><font face="Arial" size="3"></p>
<p>private</p>
<p>FCount: Integer { </font><font face="宋體" lang="ZH-CN" size="3">內(nèi)部存儲(chǔ)域</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>function GetCount: Integer; { </font><font face="宋體" lang="ZH-CN" size="3">讀方法</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>procedure SetCount(ACount: Integer); { </font><font face="宋體" lang="ZH-CN" size="3">寫(xiě)方法</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>pubilic</p>
<p>property Count: Integer read GetCount write SetCount;</p>
<p>end; </p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> </p>
<p> ?、?lt;/font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">內(nèi)部數(shù)據(jù)存儲(chǔ)</p>
<p> 關(guān)于如何存儲(chǔ)屬性的數(shù)據(jù)值,</font><font face="Arial" size="3">Delphi</font><font
face="宋體" lang="ZH-CN" size="3">沒(méi)有特別的規(guī)定,通常</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">部件遵循下列規(guī)定:</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ●</font><font size="3"> </font><font
face="宋體" lang="ZH-CN" size="3">屬性數(shù)據(jù)存儲(chǔ)在對(duì)象的數(shù)據(jù)域處</p>
<p> </font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">●</font><font
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">屬性對(duì)象域的標(biāo)識(shí)符以</font><font
face="Arial" size="3">F</font><font face="宋體" lang="ZH-CN" size="3">開(kāi)頭,例如定義在</font><font
face="Arial" size="3">TControl</font><font face="宋體" lang="ZH-CN" size="3">中的屬性</font><font
face="Arial" size="3">FWidth</font><font face="宋體" lang="ZH-CN" size="3"></p>
<p> ●</font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">屬性數(shù)據(jù)的對(duì)象域應(yīng)聲明在</font><font
face="Arial" size="3">private</font><font face="宋體" lang="ZH-CN" size="3">部分</p>
<p> </p>
<p> 后代部件只應(yīng)使用繼承的屬性自身,而不能直接訪問(wèn)內(nèi)部的數(shù)據(jù)存儲(chǔ)。</p>
<p> ?、?lt;/font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">直接訪問(wèn)</p>
<p> 使屬性數(shù)據(jù)可用的最簡(jiǎn)單的辦法是直接訪問(wèn)。屬性聲明的</font><font
face="Arial" size="3">read </font><font face="宋體" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">write</font><font face="宋體" lang="ZH-CN" size="3">部分描述了怎樣不通過(guò)調(diào)用訪問(wèn)方法來(lái)給內(nèi)部數(shù)據(jù)域賦值。但一般都用</font><font
face="Arial" size="3">read</font><font face="宋體" lang="ZH-CN" size="3">進(jìn)行直接訪問(wèn),而用</font><font
face="Arial" size="3">write</font><font face="宋體" lang="ZH-CN" size="3">進(jìn)行方法訪問(wèn),以改變部件的狀態(tài)。</p>
<p> 下面的部件聲明演示了怎樣在屬性定義的</font><font face="Arial"
size="3">read </font><font face="宋體" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">write</font><font face="宋體" lang="ZH-CN" size="3">部分都采用直接訪問(wèn):</p>
<p> </p>
<p> </font><font face="Arial" size="3">type</p>
<p>TYourComponent=class(TComponent)</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">…</font><font face="Arial" size="3"></p>
<p>private { </font><font face="宋體" lang="ZH-CN" size="3">內(nèi)部存儲(chǔ)是私有</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>FReadOnly: Boolean; { </font><font face="宋體" lang="ZH-CN" size="3">聲明保存屬性值的域</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>published { </font><font face="宋體" lang="ZH-CN" size="3">使屬性在設(shè)計(jì)時(shí)可用</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>property ReadOnly: Boolean read FReadOnly write FReadOnly; </p>
<p>end;</font><font face="宋體" lang="ZH-CN" size="3"></p>
<p> </p>
<p> ⑷</font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">訪問(wèn)方法</p>
<p> 屬性的聲明語(yǔ)法允許屬性聲明的</font><font face="Arial" size="3">read</font><font
face="宋體" lang="ZH-CN" size="3">和</font><font face="Arial" size="3">write</font><font
face="宋體" lang="ZH-CN" size="3">部分用訪問(wèn)方法取代對(duì)象私有數(shù)據(jù)域。不管屬性是如何實(shí)現(xiàn)它的</font><font
face="Arial" size="3">read </font><font face="宋體" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">write</font><font face="宋體" lang="ZH-CN" size="3">部分,方法實(shí)現(xiàn)應(yīng)當(dāng)是</font><font
face="Arial" size="3">private</font><font face="宋體" lang="ZH-CN" size="3">,后代部件只能使用繼承的屬性訪問(wèn)。</p>
<p> ?、?lt;/font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">讀方法</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">屬性的讀方法是不帶參數(shù)的函數(shù),并且返回同屬性相同類(lèi)型的值。通常讀函數(shù)的名字是“</font><font
face="Arial" size="3">Get</font><font face="宋體" lang="ZH-CN" size="3">”后加屬性名,例如,屬性</font><font
face="Arial" size="3">Count</font><font face="宋體" lang="ZH-CN" size="3">的讀方法是</font><font
face="Arial" size="3">GetCount</font><font face="宋體" lang="ZH-CN" size="3">。不帶參數(shù)的唯一例外是數(shù)組屬性。如果你不定義</font><font
face="Arial" size="3">read</font><font face="宋體" lang="ZH-CN" size="3">方法,則屬性是只寫(xiě)的。</p>
<p> ?、?lt;/font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">寫(xiě)方法</p>
<p> 屬性的寫(xiě)方法總是只帶一個(gè)參數(shù)的過(guò)程。參數(shù)可以是引用或值。通常過(guò)程名是</font><font
face="Arial" size="3">"Set"</font><font face="宋體" lang="ZH-CN" size="3">加屬性名。例如,屬性</font><font
face="Arial" size="3">Count</font><font face="宋體" lang="ZH-CN" size="3">的寫(xiě)方法名是</font><font
face="Arial" size="3">SetCount</font><font face="宋體" lang="ZH-CN" size="3">。參數(shù)的值采用設(shè)置屬性的新值,因此,寫(xiě)方法需要執(zhí)行在內(nèi)部存儲(chǔ)數(shù)據(jù)中寫(xiě)的操作。</p>
<p> 如果沒(méi)有聲明寫(xiě)方法,那么屬性是只讀的。</p>
<p> 通常在設(shè)置新值前要檢測(cè)新值是否與當(dāng)前值不同。</p>
<p> 下面是一個(gè)簡(jiǎn)單的整數(shù)屬性</font><font face="Arial" size="3">Count</font><font
face="宋體" lang="ZH-CN" size="3">的寫(xiě)方法:</p>
<p> </p>
<p> </font><font face="Arial" size="3">procedure TMyComponent.SetCount( value:
Integer); </p>
<p>begin</p>
<p>if value <>FCount then </p>
<p>begin</p>
<p>FCount := Value; </p>
<p>update; </p>
<p>end; </p>
<p>end; </p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">⑸</font><font size="3"> </font><font
face="宋體" lang="ZH-CN" size="3">缺省屬性值</p>
<p> 當(dāng)聲明一個(gè)屬性,能有選擇地聲明屬性的缺省值。部件屬性的缺省值是部件構(gòu)造方法中的屬性值集。例如,當(dāng)從</font><font
face="Arial" size="3">Component Palette</font><font face="宋體" lang="ZH-CN" size="3">選擇某部件置于窗體中時(shí),</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">通過(guò)調(diào)用部件構(gòu)造方法創(chuàng)建部件,并決定部件屬性初始值。</p>
<p> </font><font face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN"
size="3">使用聲明缺省值決定是否將屬性值存在</font><font face="Arial"
size="3">DFM</font><font face="宋體" lang="ZH-CN" size="3">文件中。如果不描述缺省值,</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">將總是保存該屬性值。聲明缺省值的方法是在屬性聲明后加</font><font
face="Arial" size="3">default</font><font face="宋體" lang="ZH-CN" size="3">指令,再跟缺省值。</p>
<p> 當(dāng)重聲明一個(gè)屬性時(shí),能夠描述沒(méi)有缺省值的屬性。如果繼承的屬性已有一個(gè),則設(shè)立沒(méi)有缺省值的屬性的方法是在屬性聲明后加</font><font
face="Arial" size="3">nodefault</font><font face="宋體" lang="ZH-CN" size="3">指令。如果是第一次聲明屬性,則沒(méi)有必要加</font><font
face="Arial" size="3">nodefault</font><font face="宋體" lang="ZH-CN" size="3">指令,因?yàn)闆](méi)有</font><font
face="Arial" size="3">default</font><font face="宋體" lang="ZH-CN" size="3">指令即表示如此。</p>
<p> 下例是名為</font><font face="Arial" size="3">IsTrue</font><font
face="宋體" lang="ZH-CN" size="3">的布爾類(lèi)型屬性設(shè)置缺省值</font><font
face="Arial" size="3">True</font><font face="宋體" lang="ZH-CN" size="3">的過(guò)程:</p>
<p> </p>
<p> </font><font face="Arial" size="3">type</p>
<p>TSampleComponent=class(TComponent)</p>
<p>private</p>
<p>FIsaTrue: Boolean; </p>
<p>pubilic</p>
<p>constructor Create (AOwner: TComponent); Overvide; </p>
<p>published</p>
<p>property Istrue: Boolean read FIsTrue write FIsTrue default True; </p>
<p>end; </p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>constructor TSampleComponent.Create (AOwner: TComponent);</p>
<p>begin</p>
<p>inherited Create ( Aowner); </p>
<p>Fistvue := True; { </font><font face="宋體" lang="ZH-CN" size="3">設(shè)置缺省值</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>end; </p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>5. </font><font face="宋體" lang="ZH-CN" size="3">編寫(xiě)屬性編輯器</font><font
face="Arial" size="3"></p>
<p>Object Inspector</font><font face="宋體" lang="ZH-CN" size="3">提供所有類(lèi)型屬性的缺省編輯器,</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">也支持通過(guò)編寫(xiě)和注冊(cè)屬性編輯器的方法為屬性設(shè)計(jì)自己的編輯器??梢宰?cè)專(zhuān)門(mén)為自定義部件的屬性設(shè)計(jì)的編輯器,也可設(shè)計(jì)用于所有某類(lèi)型的屬性。編寫(xiě)屬性編輯器需要下列五個(gè)步驟:</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">●</font><font size="3"> </font><font
face="宋體" lang="ZH-CN" size="3">繼承一個(gè)屬性編輯器對(duì)象</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ●</font><font size="3"> </font><font
face="宋體" lang="ZH-CN" size="3">將屬性作為文本編輯</p>
<p> </font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">●</font><font
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">將屬性作為整體編輯</p>
<p> ●</font><font size="3"> </font><font face="宋體" lang="ZH-CN" size="3">描述編輯器屬性</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ●</font><font size="3"> </font><font
face="宋體" lang="ZH-CN" size="3">注冊(cè)屬性編輯器</p>
<p> </p>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -