?? 009.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎(chǔ)教程-->第二章 Delphi面向?qū)ο蟮木幊谭椒ǎㄋ模?lt;/TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎(chǔ)教程 第二章 Delphi面向?qū)ο蟮木幊谭椒ǎㄋ模?quot;>
<META NAME="description" CONTENT=" - DELPHI基礎(chǔ)教程 - 第二章 Delphi面向?qū)ο蟮木幊谭椒ǎㄋ模?quot;>
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋體"}
.tt2 {font: 12pt/15pt "宋體"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%" bgcolor="#e0e0e0"><strong><A HREF="010.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="008.htm"><FONT style="FONT-SIZE: 9pt">前一頁</font></A><BR>
<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第二章 Delphi面向?qū)ο蟮木幊谭椒ǎㄋ模?lt;/FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
</font><p>2.1.10.7 <font face="宋體" lang="ZH-CN">將庫單元加入工程 </p>
</font><p><font face="宋體" lang="ZH-CN">
將庫單元加入工程是比較簡單的。無論是您自己建立的庫單元還是</font>Delphi<font
face="宋體" lang="ZH-CN">建立的與窗體有關(guān)的庫單元,如果已經(jīng)完成,則先打開您想加入庫單元的工程</font>(<font
face="宋體" lang="ZH-CN">可以用</font>Open Project<font face="宋體" lang="ZH-CN">打開工程</font>)<font
face="宋體" lang="ZH-CN">;再選用</font>File|Open File<font face="宋體"
lang="ZH-CN">,然后選擇您想加入的源程序</font>(.PAS<font face="宋體"
lang="ZH-CN">文件</font>)<font face="宋體" lang="ZH-CN">,并選擇</font>OK<font
face="宋體" lang="ZH-CN">即可。則庫單元被加入到應(yīng)用程序中。 </p>
</font><p>2.2 <font face="宋體" lang="ZH-CN">用</font>Delphi<font face="宋體"
lang="ZH-CN">的對象進行編程 </p>
</font><p> Delphi<font face="宋體"
lang="ZH-CN">是基于面向?qū)ο缶幊痰南冗M開發(fā)環(huán)境。面向?qū)ο蟮某绦蛟O(shè)計</font>(OOP)<font
face="宋體" lang="ZH-CN">是結(jié)構(gòu)化語言的自然延伸。</font>OOP<font
face="宋體" lang="ZH-CN">的先進編程方法,會產(chǎn)生一個清晰而又容易擴展及維護的程序。一旦您為您的程序建立了一個對象,您和其他的程序員可以在其他的程序中使用這個對象,完全不必重新編制繁復(fù)的代碼。對象的重復(fù)使用可以大大地節(jié)省開發(fā)時間,切實地提高您和其他人的工作效率。</font> </p>
<p>2.2.1 <font face="宋體" lang="ZH-CN">什么是對象 </p>
</font><p><font face="宋體" lang="ZH-CN">
一個對象是一個數(shù)據(jù)類型。對象就象記錄一樣,是一種數(shù)據(jù)結(jié)構(gòu)。按最簡單的理解,我們可以將對象理解成一個記錄。但實際上,對象是一種定義不確切的術(shù)語,它常用來定義抽象的事務(wù),是構(gòu)成應(yīng)用程序的項目,其內(nèi)涵遠比記錄要豐富。在本書中,對象可被理解為可視化部件如按鈕、標(biāo)簽、表等。</p>
</font><p><font face="宋體" lang="ZH-CN">
了解對象,最關(guān)鍵的是掌握對象的特性。一個對象,其最突出的特征有三個:封裝性、繼承性、多態(tài)性。 </p>
</font><p>2.2.1.1 <font face="宋體" lang="ZH-CN">對象的封裝性 </p>
</font><p><font face="宋體" lang="ZH-CN">
對對象最基本的理解是把數(shù)據(jù)和代碼組合在同一個結(jié)構(gòu)中,這就是對象的封裝特性。將對象的數(shù)據(jù)域封閉在對象的內(nèi)部,使得外部程序必需而且只能使用正確的方法才能對要讀寫的數(shù)據(jù)域進行訪問。封裝性意味著數(shù)據(jù)和代碼一起出現(xiàn)在同一結(jié)構(gòu)中,如果需要的話,可以在數(shù)據(jù)周圍砌上“圍墻”,只有用對象類的方法才能在“圍墻”上打開缺口。 </p>
</font><p>2.2.1.2 <font face="宋體" lang="ZH-CN">對象的繼承性 </p>
</font><p><font face="宋體" lang="ZH-CN">
繼承性的含義直接而且顯然。它是指把一個新的對象定義成為已存在對象的后代;新對象繼承了舊類的一切東西。在往新對象中添加任何新內(nèi)容以前,父類的每一個字段和方法都已存在于子類中,父類是創(chuàng)建子類的基石。 </p>
</font><p>2.2.1.3 <font face="宋體" lang="ZH-CN">對象的多態(tài)性 </p>
</font><p><font face="宋體" lang="ZH-CN">
多態(tài)性是在對象體系中把設(shè)想和實現(xiàn)分開的手段。如果說繼承性是系統(tǒng)的布局手段,多態(tài)性就是其功能實現(xiàn)的方法。多態(tài)性意味著某種概括的動作可以由特定的方式來實現(xiàn),這取決于執(zhí)行該動作的對象。多態(tài)性允許以類似的方式處理類體系中類似的對象。根據(jù)特定的任務(wù),一個應(yīng)用程序被分解成許多對象,多態(tài)性把高級設(shè)計處理的設(shè)想如新對象的創(chuàng)建、對象在屏幕上的重顯、程序運行的其它抽象描述等,留給知道該如何完美的處理它們的對象去實現(xiàn)。 </p>
</font><p>2.2.1.4 <font face="宋體" lang="ZH-CN">通過</font>Delphi<font face="宋體"
lang="ZH-CN">實例了解對象 </p>
</font><p><font face="宋體" lang="ZH-CN"> 讓我們結(jié)合</font>Delphi<font
face="宋體" lang="ZH-CN">的實例討論對象的概念</font>:</p>
<p><font face="宋體" lang="ZH-CN">
當(dāng)您要建立一個新工程時,</font>Delphi <font
face="宋體" lang="ZH-CN">將顯示一個窗體作為設(shè)計的基礎(chǔ)。在程序編輯器中,</font>Delphi<font
face="宋體" lang="ZH-CN">將這個窗體說明為一個新的對象類型,并同時在與窗體相關(guān)聯(lián)的庫單元中生成了創(chuàng)建這個新窗體對象的程序代碼。 </p>
</font><p>unit Unit1; </p>
<p>interface </p>
<p>uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;<font
face="宋體" lang="ZH-CN"> </font></p>
<p>type</p>
<p>TForm1 = class(TForm) {<font face="宋體" lang="ZH-CN">窗體的類型說明開始}</font></p>
<p>private</p>
<p>{ Private declarations }</p>
<p>public</p>
<p>{ Public declarations }</p>
<p>end; {<font face="宋體" lang="ZH-CN">窗體的類型說明結(jié)束} </p>
</font><p>var</p>
<p>Form1: TForm1; {<font face="宋體" lang="ZH-CN">說明一個窗體變量} </p>
</font><p>implementation </p>
<p>{$R *.DFM} </p>
<p>end. </p>
<p><font face="宋體" lang="ZH-CN">
新的窗體類型是</font>TForm1<font
face="宋體" lang="ZH-CN">,它是從</font>TForm<font face="宋體" lang="ZH-CN">繼承下來的一個對象。它具有對象的特征:含有域或方法。由于您未給窗體加入任何部件,所以它只有從</font>TForm<font
face="宋體" lang="ZH-CN">類中繼承的域和方法,在窗體對象的類型說明中,您是看不到任何域、方法的說明的。</font>Form1<font
face="宋體" lang="ZH-CN">稱為</font>TForm1<font face="宋體" lang="ZH-CN">類型的實例</font>(instance)<font
face="宋體" lang="ZH-CN">。您可以說明多個對象類型的實例,例如在多文檔界面</font>(MDI)<font
face="宋體" lang="ZH-CN">中管理多個子窗口時就要進行這樣的說明。每一個實例都有自己的說明,但所有的實例卻共用相同的代碼。</font></p>
<p><font face="宋體" lang="ZH-CN">
假設(shè)您向窗體中加入了一個按鈕部件,并對這個按鈕建立了一個</font>OnClick<font
face="宋體" lang="ZH-CN">事件處理過程。再查看</font>Unit1<font face="宋體"
lang="ZH-CN">的源程序,會發(fā)現(xiàn)</font>TForm1<font face="宋體" lang="ZH-CN">的類型說明部分如下:</p>
</font><p>type</p>
<p>TForm1 = class(TForm)</p>
<p>Button1: TButton;</p>
<p>procedure Button1Click(Sender: TObject);</p>
<p>private</p>
<p>{ Private declarations }</p>
<p>public</p>
<p>{ Public declarations }</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN"> 現(xiàn)在</font>TForm1<font
face="宋體" lang="ZH-CN">對象有了一個名為</font>Button1<font face="宋體"
lang="ZH-CN">的域:它是您在窗體中加入的按鈕。</font>TButton<font
face="宋體" lang="ZH-CN">是一個對象類型,</font>Button1<font face="宋體"
lang="ZH-CN">是</font>Tbutton<font face="宋體" lang="ZH-CN">的一個實例。它被</font>TForm1<font
face="宋體" lang="ZH-CN">對象所包含,作為它的數(shù)據(jù)域。每當(dāng)您在窗體中加入一個部件時,部件的名稱就會作為</font>TFom1<font
face="宋體" lang="ZH-CN">的域加入到類型說明中來。在</font>Delphi<font
face="宋體" lang="ZH-CN">中,您所編寫的事件處理過程都是窗體對象的方法。每當(dāng)您建立一個事件處理過程,就會在窗體的對象類型中說明一個方法。</font></p>
<p><font face="宋體" lang="ZH-CN"> 當(dāng)您使用</font>Object
Inspector<font face="宋體" lang="ZH-CN">來改變對象</font>(<font face="宋體"
lang="ZH-CN">部件</font>)<font face="宋體" lang="ZH-CN">的名稱時,這個名稱的改變會反映到程序中。例如,在</font>Object
Inspector<font face="宋體" lang="ZH-CN">中將</font>Form1<font face="宋體"
lang="ZH-CN">的</font>Name<font face="宋體" lang="ZH-CN">屬性命名為</font>ColorBox<font
face="宋體" lang="ZH-CN">,您會發(fā)現(xiàn)在類型說明部分,會將前文的</font>TForm1<font
face="宋體" lang="ZH-CN">改為: </p>
</font><p>TColorBox=class(TForm); </p>
<p><font face="宋體" lang="ZH-CN">
并且在變量說明部分,會說明</font>ColorBox<font
face="宋體" lang="ZH-CN">為</font>TColorBox<font face="宋體" lang="ZH-CN">類型的變量,由</font>Delphi<font
face="宋體" lang="ZH-CN">自動產(chǎn)生的事件處理過程名稱會自動改為</font>TColorBox.Button1Click<font
face="宋體" lang="ZH-CN">;但您自行編寫的實現(xiàn)部分的代碼卻不會被自動修改。因此,如果您在改變</font>Name<font
face="宋體" lang="ZH-CN">屬性前編寫了程序,則您必須將事件處理過程中的對象名稱進行改變。所以,原先的</font>Form1.Color<font
face="宋體" lang="ZH-CN">要改為</font>ColorBox.Color<font face="宋體" lang="ZH-CN">。 </p>
</font><p>2.2.2 <font face="宋體" lang="ZH-CN">從一個對象中繼承數(shù)據(jù)和方法 </p>
</font><p><font face="宋體" lang="ZH-CN">
前面的</font>TForm1<font face="宋體"
lang="ZH-CN">類型是很簡單的,因為它只含有域</font>Button1<font
face="宋體" lang="ZH-CN">和方法</font>Button1Click<font face="宋體" lang="ZH-CN">。但是在這個窗體上,您可以改變窗體的大小、加入或刪除窗體的最大最小化按鈕,或設(shè)置這個窗體為</font>MDI<font
face="宋體" lang="ZH-CN">界面。對于一個只包含一個域和方法的對象來講,您并沒有看到顯式的支持程序。在窗體上單擊鼠標(biāo)或用</font>Object
Inspector<font face="宋體" lang="ZH-CN">的上端的</font>Object Selector<font
face="宋體" lang="ZH-CN">選中</font>Form1<font face="宋體" lang="ZH-CN">對象,按動</font>F1<font
face="宋體" lang="ZH-CN">查閱它的在線幫助,您會在</font>Properties<font
face="宋體" lang="ZH-CN">和</font>Method<font face="宋體" lang="ZH-CN">中找到它的繼承到的全部屬性和方法。這些是在</font>TForm<font
face="宋體" lang="ZH-CN">類型中說明的,</font>TForm1<font face="宋體"
lang="ZH-CN">是</font>TForm<font face="宋體" lang="ZH-CN">的子類,直接繼承了它所有的域、方法、屬性和事件。例如窗體的顏色屬性</font>Color<font
face="宋體" lang="ZH-CN">就是在</font>TForm<font face="宋體" lang="ZH-CN">中說明的。當(dāng)您在工程中加入一個新窗體時,就等于加入了一個基本模型。通過不斷地在窗體中加入部件,您就自行定義了一個新的窗體。要自定義任何對象,您都將從已經(jīng)存在的對象中繼承域和方法,建立一個該種對象的子類。例如對象</font>TForm1<font
face="宋體" lang="ZH-CN">就被說明為對象</font>TForm<font face="宋體"
lang="ZH-CN">的子類,擁有一個窗體部件的基本屬性或方法。只有當(dāng)您在窗體中加入了部件或編寫了事件處理過程時,</font>Form1<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>TForm<font
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -