?? 009.htm
字號:
<p><font face="宋體" lang="ZH-CN"> 一個比較特殊的對象是從一個范圍較廣或較一般的對象中繼承下來的,它是這個特別對象的祖先,這個對象則稱為祖先的后代。一個對象只能有一個直接的祖先,但是它可以有許多后代。</font>TForm<fontface="宋體" lang="ZH-CN">是</font>TForm1<font face="宋體" lang="ZH-CN">類型的祖先,所有的窗體對象都是</font>TForm<fontface="宋體" lang="ZH-CN">的后代。</font></p><p><font face="宋體" lang="ZH-CN"> 用</font>F1<fontface="宋體" lang="ZH-CN">查閱窗體的在線幫助時,您會發(fā)現(xiàn)</font>TForm<fontface="宋體" lang="ZH-CN">被稱為</font>component(<font face="宋體" lang="ZH-CN">部件</font>)<fontface="宋體" lang="ZH-CN">。這是因為所有的部件都是對象。</font></p><p><font face="宋體" lang="ZH-CN"> 在這個結(jié)構(gòu)中所有的部件都是對象。部件類型</font>TComponent<fontface="宋體" lang="ZH-CN">從</font>TObject<font face="宋體" lang="ZH-CN">類型中繼承數(shù)據(jù)和程序代碼,并具有額外的可以用作特殊用途的屬性、方法、事件,所以部件可以直接和用戶打交道,記錄它的狀態(tài)并存貯到文件中等等。控制類型</font>TControl<fontface="宋體" lang="ZH-CN">從</font>TComponent<font face="宋體" lang="ZH-CN">中繼承而來,又增加了新的功能,如它可以顯示一個對象。在上圖中,雖然</font>TCheckBox<fontface="宋體" lang="ZH-CN">不是直接由</font>TObject<font face="宋體" lang="ZH-CN">繼承來的,但是它仍然有任何對象所擁有的屬性,因為在</font>VCL<fontface="宋體" lang="ZH-CN">結(jié)構(gòu)中,</font>TCheckBox<font face="宋體" lang="ZH-CN">終究還是從</font>TObject<font face="宋體" lang="ZH-CN">中繼承了所有功能的特殊對象,但它還有些自行定義的獨到的功能,如可以選擇記錄狀態(tài)等。 </p></font><p>2.2.3 <font face="宋體" lang="ZH-CN">對象的范圍 </p></font><p>2.2.3.1 <font face="宋體" lang="ZH-CN">關(guān)于對象的范圍 </p></font><p><font face="宋體" lang="ZH-CN"> 一個對象的范圍決定了它的數(shù)據(jù)域、屬性值、方法的活動范圍和訪問范圍。在一個對象的說明部分說明的數(shù)據(jù)域、屬性值、方法都只是在這個對象的范圍中,而且只有這個對象和它的后代才能擁有它們。雖然這些方法的實際程序代碼可能是在這個對象之外的程序庫單元中,但這些方法仍然在這個對象的范圍內(nèi),因為它們是在這個對象的說明部分中說明的。</font></p><p><font face="宋體" lang="ZH-CN"> 當(dāng)您在一個對象的事件處理過程中編寫程序代碼來訪問這個對象的屬性值、方法或域時,您不需要在這些標(biāo)識符之前加上這個對象變量的名稱。例如,如果您在一個新窗體上加入一個按鈕和一個編輯框,并為這個按鈕編寫</font>OnClick<fontface="宋體" lang="ZH-CN">事件處理過程: </font></p><p>procedure TForm1.Button1Click(Sender:Tobject);</p><p>begin</p><p>Color :=clFuchsia;</p><p>Edit1.Color :=clLime;</p><p>end; </p><p><font face="宋體" lang="ZH-CN"> 其中的第一行語句是為整個窗體</font>Form1<fontface="宋體" lang="ZH-CN">著色。您也可以編寫如下:</p><p> </font></p><p>Form1.Color :=clFuchsia; </p><p><font face="宋體" lang="ZH-CN"> 但您可以不必加上</font>Form1.<fontface="宋體" lang="ZH-CN">,因為</font>Button1Click<font face="宋體" lang="ZH-CN">方法是在</font>TForm1<fontface="宋體" lang="ZH-CN">對象的范圍里。當(dāng)您在一個對象的范圍中時,您可以省略所有這個對象中的屬性值、方法、域之前的對象標(biāo)識符。但是當(dāng)您編寫第二個語句改變編輯框的底色時,因為此時您想訪問的是</font>TEdit1<fontface="宋體" lang="ZH-CN">對象的</font>Color<font face="宋體" lang="ZH-CN">屬性,而不是</font>TForm1<fontface="宋體" lang="ZH-CN">類型的,所以您需要通過在屬性前面加上編輯框的名稱來指明</font>Color<fontface="宋體" lang="ZH-CN">屬性值的范圍。如果不指明,</font>Delphi<fontface="宋體" lang="ZH-CN">會象第一個語句一樣,將窗體的顏色變成綠色。因為</font>Edit1<fontface="宋體" lang="ZH-CN">部件是在窗體中的,它是窗體的一個數(shù)據(jù)域,所以您同樣不必指明其從屬關(guān)系。</font></p><p><font face="宋體" lang="ZH-CN"> 如果</font>Edit1<fontface="宋體" lang="ZH-CN">是在其他窗體中,那么您需要在編輯框之前加上這個船體對象的名稱了。例如,如果</font>Edit1<fontface="宋體" lang="ZH-CN">是在</font>Form2<font face="宋體" lang="ZH-CN">之中,那它是</font>Form2<fontface="宋體" lang="ZH-CN">說明的一個數(shù)據(jù)域,并位于</font>Form2<fontface="宋體" lang="ZH-CN">的范圍中,那么您需要將第二句改為: </p></font><p>Form2.Edit1.Color := clLime; </p><p><font face="宋體" lang="ZH-CN">而且需要把</font>Unit2<font face="宋體"lang="ZH-CN">加入</font>Unit1<font face="宋體" lang="ZH-CN">的</font>uses<fontface="宋體" lang="ZH-CN">子句中。</font></p><p><font face="宋體" lang="ZH-CN"> 一個對象的范圍擴展到這個對象的所有后代。</font>TForm<fontface="宋體" lang="ZH-CN">的所有屬性值、方法和事件都在</font>TForm1<fontface="宋體" lang="ZH-CN">的范圍中,因為</font>TForm1<font face="宋體"lang="ZH-CN">是</font>TForm<font face="宋體" lang="ZH-CN">的后代。您的應(yīng)用程序不能說明和祖先的數(shù)據(jù)域重名的類型、變量等。如果</font>Delphi<fontface="宋體" lang="ZH-CN">顯示了一個標(biāo)識符被重復(fù)定義的信息,就有可能是一個數(shù)據(jù)域和其祖先對象</font>(<fontface="宋體" lang="ZH-CN">例如</font>TForm)<font face="宋體" lang="ZH-CN">的一個數(shù)據(jù)域有了相同的名稱。可以嘗試改變這個標(biāo)識符的名稱。 </p></font><p>2.2.3.2 <font face="宋體" lang="ZH-CN">重載一個方法 </p></font><p><font face="宋體" lang="ZH-CN"> 您可以重載</font>(Override)<fontface="宋體" lang="ZH-CN">一個方法。通過在后代對象中說明一個與祖先對象重名的方法,就可以重載一個方法。如果想使這個方法在后代對象中作和祖先對象中一樣的工作但是使用不同的方式時,您就可以重載這個方法。</font>Delphi<fontface="宋體" lang="ZH-CN">不推薦您經(jīng)常重載方法,除非您想建立一個新的部件。重載一個方法,</font>Delphi<fontface="宋體" lang="ZH-CN">編譯器不會給出錯誤或警告提示信息。</p></font><p>2.2.4 <font face="宋體" lang="ZH-CN">對象公有域和私有域的說明 </p></font><p><font face="宋體" lang="ZH-CN"> 當(dāng)使用</font>Delphi<font face="宋體"lang="ZH-CN">的環(huán)境來建立應(yīng)用程序時,您可以在一個</font>TForm<fontface="宋體" lang="ZH-CN">的后代對象中加入數(shù)據(jù)域和方法,也可以通過直接修改對象類型說明的方法來為一個對象加上域和方法,而不是把一個部件加入窗體或事件處理過程中。</font></p><p><font face="宋體" lang="ZH-CN"> 您可以在對象的</font>Public<fontface="宋體" lang="ZH-CN">或</font>Private<font face="宋體" lang="ZH-CN">部分加入新的數(shù)據(jù)域和方法。</font>Public<fontface="宋體" lang="ZH-CN">和</font>Private<font face="宋體" lang="ZH-CN">是</font>ObjectPascal<font face="宋體" lang="ZH-CN">的保留字。當(dāng)您在工程中加入新的窗體時,</font>Delphi<fontface="宋體" lang="ZH-CN">開始建立這個新窗體對象。每一個新的對象都包含</font>public<fontface="宋體" lang="ZH-CN">和</font>private<font face="宋體" lang="ZH-CN">指示,以便您在代碼中加入數(shù)據(jù)域和方法。在</font>public<fontface="宋體" lang="ZH-CN">部分中說明其它庫單元中對象的方法也可以訪問的數(shù)據(jù)域或方法。在</font>private<fontface="宋體" lang="ZH-CN">部分的說明有訪問的限制。如果您在</font>private<fontface="宋體" lang="ZH-CN">中說明域和方法,那么它在說明這個對象的庫單元外是不透明的,而且不能被訪問。</font>private<fontface="宋體" lang="ZH-CN">中可以說明只能被本庫單元方法訪問的數(shù)據(jù)域和本庫單元對象訪問的方法。過程或函數(shù)的程序代碼可以放在庫單元的</font>implementation<fontface="宋體" lang="ZH-CN">部分。 </p></font><p>2.2.5 <font face="宋體" lang="ZH-CN">訪問對象的域和方法 </p></font><p><font face="宋體" lang="ZH-CN"> 當(dāng)您想要改變一個窗體對象的一個域的某個屬性,或是調(diào)用它的一個方法時,您必須在這個屬性名稱或調(diào)用方法之前加上這個對象的名稱。例如,如果您的窗體上有一個編輯框部件,而您需要在運行中改變它的</font>Text<fontface="宋體" lang="ZH-CN">屬性,需要編寫下列的代碼: </p></font><p>Edit1.Text := 'Welcome to Delphi'; </p><p><font face="宋體" lang="ZH-CN">同樣,清除編輯框部件中選中的文本,可以調(diào)用</font>TEdit<fontface="宋體" lang="ZH-CN">部件的相應(yīng)方法: </p></font><p>Edit1.ClearSelection; </p><p><font face="宋體" lang="ZH-CN"> 如果您想改變一個窗體對象中一個對象域的多個屬性或調(diào)用多個方法時,使用</font>with<fontface="宋體" lang="ZH-CN">語句可以簡化您的程序。</font>with<font face="宋體"lang="ZH-CN">語句在對象中可以和在記錄中一樣方便地使用。下面的事件處理過程在響應(yīng)</font>OnClick<fontface="宋體" lang="ZH-CN">事件時,會對一個列表框作多個調(diào)整: </p></font><p>procedure TForm1.Button1Click(Sender:TObject); </p><p>begin</p><p>ListBox1.Clear;</p><p>ListBox1.MultiSelect :=True;</p><p>ListBox1.Item.Add('One');</p><p>ListBox1.Item.Add('Two');</p><p>ListBox1.Item.Add('Three');</p><p>ListBox1.Sorted :=Ture;</p><p>ListBox1.FontStyle :=[fsBold];</p><p>ListBox1.Font.Color :=clPurple;</p><p>ListBox1.Font.Name :='Times New Roman';</p><p>ListBox1.ScaleBy(125,100);</p><p>end; </p><p><font face="宋體" lang="ZH-CN">如果使用了</font>With<font face="宋體"lang="ZH-CN">語句,則程序如下: </p></font><p>procedure TForm1.Button1Click(Sender:TObject); </p><p>begin</p><p>with (ListBox1) do</p><p>begin</p><p>Clear;</p><p>MultiSelect :=True;</p><p>Item.Add('One');</p><p>Item.Add('Two');</p><p>Item.Add('Three');</p><p>Sorted :=Ture;</p><p>FontStyle :=[fsBold];</p><p>Font.Color :=clPurple;</p><p>Font.Name :='Times New Roman';</p><p>ScaleBy(125,100);</p><p>end;</p><p>end; </p><p><font face="宋體" lang="ZH-CN"> 使用</font>with<fontface="宋體" lang="ZH-CN">語句,您不必在每一個屬性或方法前加上</font>ListBox1<fontface="宋體" lang="ZH-CN">標(biāo)識符,在</font>With<font face="宋體" lang="ZH-CN">語句之內(nèi),所有的屬性或調(diào)用方法對于</font>ListBox<fontface="宋體" lang="ZH-CN">這個對象而言都是在它的范圍內(nèi)的。 </p></font><p>2.2.6 <font face="宋體" lang="ZH-CN">對象變量的賦值 </p></font><p><font face="宋體" lang="ZH-CN"> 如果兩個變量類型相同或兼容,您可以把其中一個對象變量賦給另一個對象變量。例如,對象</font>TForm1<fontface="宋體" lang="ZH-CN">和</font>TForm2<font face="宋體" lang="ZH-CN">都是從</font>TForm<fontface="宋體" lang="ZH-CN">繼承下來的類型,而且</font>Form1<font face="宋體"lang="ZH-CN">和</font>Form2<font face="宋體" lang="ZH-CN">已被說明過,那么您可以把</font>Form1<fontface="宋體" lang="ZH-CN">賦給</font>Form2:</p><p>Form2 :=Form1;</p><p><font face="宋體" lang="ZH-CN"> 只要賦值的對象變量是被賦值的對象變量的祖先類型,您就可以將一個對象變量賦給另一個對象變量。例如,下面是一個</font>TDataForm<fontface="宋體" lang="ZH-CN">的類型說明,在變量說明部分一共說明了兩個變量:</font>AForm<fontface="宋體" lang="ZH-CN">和</font>DataForm<font face="宋體" lang="ZH-CN">。 </p></font><p>type</p><p>TDataForm = class(TForm)</p><p>Button1:TButton;</p><p>Edit1:TEdit;</p>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -