📄 007.htm
字号:
face="宋体" lang="ZH-CN">部分含有库函数、类型、私有,公有域的说明,也可以含有常量、变量的说明。这一部分可以作为程序模块的说明部分。在库单元的</font>implementation<fontface="宋体" lang="ZH-CN">部分中通常含有各种事件处理过程,它们可以视为模块的语句部分,是事件处理模块。库单元模块结束于库单元结束的</font>end.<fontface="宋体" 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>(.)<fontface="宋体" 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<fontface="宋体" lang="ZH-CN">的</font>uses<font face="宋体" lang="ZH-CN">子句中加入</font>Unit1<fontface="宋体" 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<fontface="宋体" lang="ZH-CN">后面。例如,下面的例程实现将两个编辑框中的整数相加,显示在第三个编辑框中。用到了一个整形的全局变量</font>Count<fontface="宋体" 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<fontface="宋体" lang="ZH-CN">增加一次,必须对全程变量</font>Count<fontface="宋体" lang="ZH-CN">进行初始化处理。在程序库单元的结尾处,最后一个</font>end.<fontface="宋体" lang="ZH-CN">保留字之前,加入保留字</font>initialization<fontface="宋体" 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<fontface="宋体" lang="ZH-CN">被触发时,</font>Count<font face="宋体" lang="ZH-CN">就会被增加一次,以表征计算次数。如果用面向对象编程,则</font>Count<fontface="宋体" lang="ZH-CN">可以说明成窗体的一个域,这在下一节中将有讲述。 </p></font><p>2.1.8 <font face="宋体" lang="ZH-CN">编写一个过程或函数</font></p><p><font face="宋体" lang="ZH-CN"> 在您开发</font>Delphi<fontface="宋体" 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<fontface="宋体" lang="ZH-CN">保留字在</font>Delphi<font face="宋体" lang="ZH-CN">中用来专指函数返回值。在上文的例程中加入</font>NoValue<fontface="宋体" 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<fontface="宋体" 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<fontface="宋体" 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<fontface="宋体" 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>ObjectPascal<font face="宋体" lang="ZH-CN">语言中已经定义的类型之外,</font>Delphi<fontface="宋体" lang="ZH-CN">的应用程序还可以建立新的数据类型。类型说明部分有保留字</font>type<fontface="宋体" 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<fontface="宋体" lang="ZH-CN">类型的变量必须是整形值;一个</font>TPrimaryColor<fontface="宋体" lang="ZH-CN">类型的变量只能是</font>red<font face="宋体"lang="ZH-CN">、</font>yellow<font face="宋体" lang="ZH-CN">或</font>blue<fontface="宋体" lang="ZH-CN">等等。每一个类型的名称都是由字母</font>T<fontface="宋体" lang="ZH-CN">开始,这并非必须的,但它是</font>Delphi<fontface="宋体" lang="ZH-CN">的惯例,在区别类型名和标识符时非常有用。类型说明可以是局部的,也可以是全局的。如果您把它放在</font>implementation<fontface="宋体" lang="ZH-CN">后面,则表明对于库单元来讲,它是全局的,所有的事件处理过程和其他的过程、函数都可以调用它。如果类型是在过程中被说明的,则是局部的,离开这一过程,该类型将失效。</font></p><p><font face="宋体" lang="ZH-CN"> 一般来讲,在过程和函数中,任何类型说明都在变量说明之前,而任何变量说明都在常量之前。但是,只要遵从说明必须在过程与函数的标题之后,而且在程序代码之前,即是有效的。</font></p><hr width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%" ><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></strong></TD></TR></table></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -