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