?? 007.htm
字號:
face="宋體" lang="ZH-CN">處。</font></p>
<p><font face="宋體" lang="ZH-CN">
程序模塊中可以包含其他的程序模塊。上文庫單元模塊中含有事件處理模塊。而庫單元模塊實際是在工程程序模塊中。</font></p>
<p><font face="宋體" lang="ZH-CN">
所有的</font>Delphi<font face="宋體"
lang="ZH-CN">應用程序都有相同的基本結構。當程序逐漸復雜時,在程序中加入模塊即可。例如在庫單元模塊中加入事件處理模塊,向工程中加入庫單元模塊等。模塊化編程使得程序結構良好,并且對數據具有保護作用。 </p>
</font><p>2.1.7 <font face="宋體" lang="ZH-CN">關于作用范圍 </p>
</font><p>2.1.7.1 <font face="宋體" lang="ZH-CN">標識符的作用范圍 </p>
</font><p><font face="宋體" lang="ZH-CN">
一個變量、常量、方法、類型或其他標識符的范圍定義了這個標識符的活動區域。對于說明這個標識符的最小程序模塊而言,此標識符是局部的。當您的應用程序在說明一個標識符的程序模塊外執行時,該標識符就不在此范圍內。這意味著此時執行的程序無法訪問這個標識符,只有當程序再度進入說明這個標識符的程序模塊時,才可以訪問它。</font></p>
<p><font face="宋體" lang="ZH-CN">
下面的示意圖表示一個含有兩個庫單元的工程,每個庫單元中又各有三個過程或事件處理過程。</font></p>
<p>2.1.7.2 <font face="宋體" lang="ZH-CN">訪問其他程序模塊中的說明 </p>
</font><p><font face="宋體" lang="ZH-CN">
您可以在當前的程序模塊中訪問其他程序模塊中的說明。例如您在庫單元中編寫一個事件處理過程來計算利率,則其他的庫單元可以訪問這個事件處理過程。要訪問不在當前庫單元中的說明,應在這個說明之前加上其他應用程序的名稱和一個點號</font>(.)<font
face="宋體" lang="ZH-CN">。例如,在庫單元</font>Unit1<font face="宋體"
lang="ZH-CN">中有事件處理過程</font>CalculateInterest<font face="宋體"
lang="ZH-CN">過程,現在您想在庫單元</font>Unit2<font face="宋體" lang="ZH-CN">中調用這一過程,則可以在</font>Unit2<font
face="宋體" lang="ZH-CN">的</font>uses<font face="宋體" lang="ZH-CN">子句中加入</font>Unit1<font
face="宋體" lang="ZH-CN">,并使用下面的說明: </p>
</font><p>Unit1.CalculateInterest(PrincipalInterestRate : Double)<font face="宋體"
lang="ZH-CN">; </p>
</font><p><font face="宋體" lang="ZH-CN">
應用程序的代碼不能在一個模塊外訪問它說明的變量。事實上,當程序執行跳出一個模塊后,這些變量就不存在于內存中了。這一點對于任何標識符都是一樣的,不管事件處理過程、過程、函數還是方法,都具有這一性質。這樣的標識符稱為局部變量。 </p>
</font><p>2.1.7.3 <font face="宋體" lang="ZH-CN">按照作用范圍說明標識符</font></p>
<p><font face="宋體" lang="ZH-CN">
您可以在應用程序的不同地方說明一個標識符,而只需保證它們的有效范圍不同即可。編譯器會自動訪問最靠近當前范圍的標識符。</font></p>
<p><font face="宋體" lang="ZH-CN">
庫單元的全局變量一般可以說明在保留字</font>implementation<font
face="宋體" lang="ZH-CN">后面。例如,下面的例程實現將兩個編輯框中的整數相加,顯示在第三個編輯框中。用到了一個整形的全局變量</font>Count<font
face="宋體" lang="ZH-CN">: </p>
</font><p><font face="宋體" lang="ZH-CN">…</font>implememntation </p>
<p>var</p>
<p>Count : Integer; </p>
<p>procedure TForm1.AddClick(Sender:TObject);</p>
<p>var</p>
<p>FirstNumber,SecondNumber:Integer;</p>
<p>begin</p>
<p>Count := Count + 1;</p>
<p>Counter.Text := IntToStr(Count);</p>
<p>FirstNumber := StrToInt(Edit1.Text);</p>
<p>SecondNumber := StrToInt(Edit2.Text);</p>
<p>Edit3.Text := IntToStr(FirstNumber+SecondNumber); </p>
<p>end;</p>
<p><font face="宋體" lang="ZH-CN">… </p>
</font><p><font face="宋體" lang="ZH-CN">
為了實現每按動一次按鈕</font>Count<font
face="宋體" lang="ZH-CN">增加一次,必須對全程變量</font>Count<font
face="宋體" lang="ZH-CN">進行初始化處理。在程序庫單元的結尾處,最后一個</font>end.<font
face="宋體" lang="ZH-CN">保留字之前,加入保留字</font>initialization<font
face="宋體" lang="ZH-CN">和初始化</font>Count<font face="宋體" lang="ZH-CN">的代碼: </p>
</font><p><font face="宋體" lang="ZH-CN">…</font></p>
<p>initialization</p>
<p>Count := 0; </p>
<p><font face="宋體" lang="ZH-CN">
這樣當事件處理過程</font>AddClick<font
face="宋體" lang="ZH-CN">被觸發時,</font>Count<font face="宋體" lang="ZH-CN">就會被增加一次,以表征計算次數。如果用面向對象編程,則</font>Count<font
face="宋體" lang="ZH-CN">可以說明成窗體的一個域,這在下一節中將有講述。 </p>
</font><p>2.1.8 <font face="宋體" lang="ZH-CN">編寫一個過程或函數</font></p>
<p><font face="宋體" lang="ZH-CN">
在您開發</font>Delphi<font
face="宋體" lang="ZH-CN">應用程序時,所需的大部分代碼都編寫在事件處理過程中,但有時仍然需要編寫不是事件處理過程的函數或過程。例如,您可以把在多個事件處理過程中用得到語句編寫成過程,然后任何事件處理過程、過程、函數都可以象調用已經存在的過程或函數一樣直接調用它。好處是您只需編寫一次代碼,而且程序代碼會比較清楚。</p>
</font><p>2.1.8.1 <font face="宋體" lang="ZH-CN">一個自行編寫的函數例程 </p>
</font><p><font face="宋體" lang="ZH-CN">
在上文兩個數相加的程序中,如果編輯框中無值,則會使得程序出錯中斷。為避免這種情況,編寫下面的函數,檢查編輯框中是否有值,如無值,則提醒用戶輸入: </p>
</font><p>function NoValue(AnEditBox:TEdit):Boolean;</p>
<p>begin</p>
<p>if AnEditBox.Text='' then</p>
<p>begin</p>
<p>AnEditBox.Color := clRed;</p>
<p>AnEditBox.Text := '<font face="宋體" lang="ZH-CN">請輸入整數值</font>';</p>
<p>Result := True;</p>
<p>end</p>
<p>else</p>
<p>begin</p>
<p>AnEditBox.Color := clWindow;</p>
<p>Result := False;</p>
<p>end;</p>
<p>end; </p>
<p> NoValue<font face="宋體" lang="ZH-CN">函數會檢查編輯框是否為空,如果是,編輯框顏色變紅,并提醒用戶輸入一個整數,然后函數返回真值;</font>Result<font
face="宋體" lang="ZH-CN">保留字在</font>Delphi<font face="宋體" lang="ZH-CN">中用來專指函數返回值。在上文的例程中加入</font>NoValue<font
face="宋體" lang="ZH-CN">函數: </p>
</font><p>procedure TForm1.AddClick(Sender: TObject);</p>
<p>var</p>
<p>FirstNumber,SecondNumber : Integer;</p>
<p>begin</p>
<p>if NoValue(Edit1)or NoValue(Edit2) then</p>
<p>exit;</p>
<p>Count := Count + 1;</p>
<p>Counter.Text := IntToStr(Count);</p>
<p>FirstNumber := StrToInt(Edit1.Text);</p>
<p>SecondNumber := StrToInt(Edit2.Text);</p>
<p>Edit3.Text := IntToStr(FirstNumber+SecondNumber);</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">
如果其中的任何一個返回真值,則表示有編輯框空,會執行</font>exit<font
face="宋體" lang="ZH-CN">過程,使得當前的程序模塊停止執行,并使得編輯框出現輸值提示。當新值被輸入后,再執行程序時,紅色提示被隱去,恢復正常的計算狀態。 </p>
</font><p>2.1.8.2 <font face="宋體" lang="ZH-CN">過程和函數的標題 </p>
</font><p><font face="宋體" lang="ZH-CN">
每一個過程或函數都以標題開始,其中包括過程或函數的名稱和它使用的參數。過程以保留字</font>procedure<font
face="宋體" lang="ZH-CN">開始,函數以保留字</font>function<font face="宋體"
lang="ZH-CN">開始。參數位于括號里面,每一個參數以分號分隔。例如: </p>
</font><p>procedure validateDate(Day : Integer; month : Integer; Year : Integer);</p>
<p><font face="宋體" lang="ZH-CN">
您也可以將相同類型的參數組合在一起,則上述過程頭寫作: </p>
</font><p>procedure ValidateDate(Day, Month, Year : Integer); </p>
<p><font face="宋體" lang="ZH-CN">
函數在標題中還多了一項:返回值的類型。下面是一個返回值為</font>Double<font
face="宋體" lang="ZH-CN">型的函數標題: </p>
</font><p>function CalculateInterest(principal,InterestRate:Double):Double; </p>
<p>2.1.8.3 <font face="宋體" lang="ZH-CN">函數和過程中的類型說明 </p>
</font><p><font face="宋體" lang="ZH-CN">
一個過程或函數程序模塊也含有說明部分和語句部分。說明部分可以包括類型說明、變量說明、常量說明等。除了</font>Object
Pascal<font face="宋體" lang="ZH-CN">語言中已經定義的類型之外,</font>Delphi<font
face="宋體" lang="ZH-CN">的應用程序還可以建立新的數據類型。類型說明部分有保留字</font>type<font
face="宋體" lang="ZH-CN">開始。下面是一些類型的說明: </p>
</font><p>type </p>
<p>Tcount = Integer;</p>
<p>TPrimaryColor = (Red,Yellow,Blue);</p>
<p>TTestIndex = 1..100;</p>
<p>TTextValue = -99..99;</p>
<p>TTestList = array [TTestIndex] of TTestValue;</p>
<p>TCharVal = Ord('A')..Ord('Z') ;</p>
<p>Today = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,</p>
<p>Sunday) ; </p>
<p><font face="宋體" lang="ZH-CN">
在類型標識符后面,用“=”號定義了新的類型。類型界定了變量的取值范圍,例如,</font>TCount<font
face="宋體" lang="ZH-CN">類型的變量必須是整形值;一個</font>TPrimaryColor<font
face="宋體" lang="ZH-CN">類型的變量只能是</font>red<font face="宋體"
lang="ZH-CN">、</font>yellow<font face="宋體" lang="ZH-CN">或</font>blue<font
face="宋體" lang="ZH-CN">等等。每一個類型的名稱都是由字母</font>T<font
face="宋體" lang="ZH-CN">開始,這并非必須的,但它是</font>Delphi<font
face="宋體" lang="ZH-CN">的慣例,在區別類型名和標識符時非常有用。類型說明可以是局部的,也可以是全局的。如果您把它放在</font>implementation<font
face="宋體" lang="ZH-CN">后面,則表明對于庫單元來講,它是全局的,所有的事件處理過程和其他的過程、函數都可以調用它。如果類型是在過程中被說明的,則是局部的,離開這一過程,該類型將失效。</font></p>
<p><font face="宋體" lang="ZH-CN">
一般來講,在過程和函數中,任何類型說明都在變量說明之前,而任何變量說明都在常量之前。但是,只要遵從說明必須在過程與函數的標題之后,而且在程序代碼之前,即是有效的。</font></p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" bgcolor="#e0e0e0"><strong><A HREF="008.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="006.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>
</TR>
</table>
</BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -