| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
龙腾教程网  
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
 
  您当前位置:您现在的位置: 龙腾软件教程网 >> 文章中心 >> 应用程序 >> Delphi教程 >> 全套完整教程 >> Delphi面向对象的编程方法 >> 文章正文>>>>>> 
Delphi面向对象的编程方法(二)

2.1.4 跳转语句 

  Object Pascal的跳转语句有if和case两个。 

  2.1.4.1 if语句 

   if语句会计算一个表达式,并根据计算结果决定程序流程。在上文的例程中,根据ColorDialog.Execute的返回值,决定窗体的背景颜色。if保留字后跟随一个生成Boolean值True或False的表达式。一般用“=”作为关系运算符,比较产生一个布尔型值。当表达式为True时,执行then后的语句。否则执行else后的代码,if语句也可以不含else部分,表达式为False时自动跳到下一行程序。

   if语句可以嵌套,当使用复合语句表达时,复合语句前后需加上begin…end。else保留字前不能加“;”,而且,编译器会将else语句视为属于最靠近的if语句。必要时,须使用begin…end保留字来强迫else部分属于某一级的if语句。 

  2.1.4.2 case语句 

   case语句适用于被判断的变量或属性是整形、字符型、枚举型或子界型时(LongInt除外)。用case语句进行逻辑跳转比编写复杂的if语句容易阅读,而且程序代码整形较快。

  下面的例程显示一个使用case语句的窗体:

  建立如下的事件处理过程: 

  procedure TForm1.Button1Click(Sender: TObject);

  var

  Number : Integer;

  begin

  Number := StrToInt(Edit1.Text);

  case Number of

  1,3,5,7,9: Label2.Caption := '奇数';

  0,2,4,6,8: Label2.Caption := '偶数';

  10..100:

  begin

  Label2.Caption := '在10到100之间';

  Form1.Color := clBlue;

  end;

  else

  Label2.Caption := '大于100或为负数';

  end;

  end; 

   执行程序,当Edit1部件接受到一个值,并按动“OK”按钮触发程序后,Number便被赋值为用户输入的数值。case语句根据Number的值判断该执行哪一条语句。象if语句一样。case语句也有可选择的else部分。case语句以end结尾。 

  2.1.5 循环语句 

   Object Pascal的循环语句有三种:repeat、while和for语句。 

  2.1.5.1 repeat语句 

   repeat语句会重复执行一行或一段语句直到某一状态为真。语句以repeat开始,以until结束,其后跟随被判断的布尔表达式。参阅以下的例程: 

  i := 0;

  repeat

  i := i+1;

  Writen(i);

  until i=10; 

   当此语句被执行时,窗体的下方会出现1到10的数字。布尔表达式 i=10 (注意,与其他语言不同的是,“=”是关系运算符,而不能进行赋值操作)直到repeat..until程序段的结尾才会被计算,这意味着repeat语句至少会被执行一次。 

  2.1.5.2 while语句 

   while语句和repeat语句的不同之处是,它的布尔表达式在循环的开头进行判断。while保留字后面必须跟一个布尔表达式。如果该表达式的结果为真,循环被执行,否则会退出循环,执行while语句后面的程序。

   下面的例程达到和上面的repeat例程达到同样的效果: 

  i := 0;

  while i<10 do

  begin

  i := i+1;

  writeln(i);

  end;  

  2.1.5.3 for语句 

   for语句的程序代码会执行一定的次数。它需要一个循环变量来控制循环次数。您需要说明一个变量,它的类型可以是整形、布尔型、字符型、枚举型或子界型。

  下面的程序段会显示1到5的数字,i为控制变量: 

  var

  i : integer;

  for i := 1 to 5 do

  writeln(i); 

   以上介绍了三种循环语句。如果您知道循环要执行多少次的话,可以使用for语句。for循环执行速度快,效率比较高。如果您不知道循环要执行多少次,但至少会执行一次的话,选用repeat..until语句比较合适;当您认为程序可能一次都不执行的话,最好选用while..do语句。 

  2.1.6 程序模块

   程序模块在Object Pascal中是很重要的概念。它们提供了应用程序的结构,决定了变量、属性值的范围及程序执行的过程。它由两个部分组成:可选择的说明部分和语句部分。如果有说明部分,则必在语句部分之前。说明部分包括变量说明、常量说明、类型说明、标号说明、程序,函数,方法的说明等。语句部分叙述了可执行的逻辑行动。

   在Delphi中,最常见的程序模块便是事件处理过程中的程序模块。下面的事件处理过程是含有变量说明部分的程序模块: 

  procedure TForm.Button1Click(Sender Tobject);

  var {程序模块的说明部分}

  Name : string;

  begin {程序模块的语句部分}

  Name := Edit1.Text;

  Edit2.Text := 'Welcome to Delphi'+Name;

  end; {程序模块结束} 

   库单元也是程序模块。库单元的interface部分含有库函数、类型、私有,公有域的说明,也可以含有常量、变量的说明。这一部分可以作为程序模块的说明部分。在库单元的implementation部分中通常含有各种事件处理过程,它们可以视为模块的语句部分,是事件处理模块。库单元模块结束于库单元结束的end.处。

   程序模块中可以包含其他的程序模块。上文库单元模块中含有事件处理模块。而库单元模块实际是在工程程序模块中。

   所有的Delphi应用程序都有相同的基本结构。当程序逐渐复杂时,在程序中加入模块即可。例如在库单元模块中加入事件处理模块,向工程中加入库单元模块等。模块化编程使得程序结构良好,并且对数据具有保护作用。

2.1.7 关于作用范围 

  2.1.7.1 标识符的作用范围 

   一个变量、常量、方法、类型或其他标识符的范围定义了这个标识符的活动区域。对于说明这个标识符的最小程序模块而言,此标识符是局部的。当您的应用程序在说明一个标识符的程序模块外执行时,该标识符就不在此范围内。这意味着此时执行的程序无法访问这个标识符,只有当程序再度进入说明这个标识符的程序模块时,才可以访问它。

   下面的示意图表示一个含有两个库单元的工程,每个库单元中又各有三个过程或事件处理过程。

  2.1.7.2 访问其他程序模块中的说明 

   您可以在当前的程序模块中访问其他程序模块中的说明。例如您在库单元中编写一个事件处理过程来计算利率,则其他的库单元可以访问这个事件处理过程。要访问不在当前库单元中的说明,应在这个说明之前加上其他应用程序的名称和一个点号(.)。例如,在库单元Unit1中有事件处理过程CalculateInterest过程,现在您想在库单元Unit2中调用这一过程,则可以在Unit2的uses子句中加入Unit1,并使用下面的说明: 

  Unit1.CalculateInterest(PrincipalInterestRate : Double); 

   应用程序的代码不能在一个模块外访问它说明的变量。事实上,当程序执行跳出一个模块后,这些变量就不存在于内存中了。这一点对于任何标识符都是一样的,不管事件处理过程、过程、函数还是方法,都具有这一性质。这样的标识符称为局部变量。 

  2.1.7.3 按照作用范围说明标识符

   您可以在应用程序的不同地方说明一个标识符,而只需保证它们的有效范围不同即可。编译器会自动访问最靠近当前范围的标识符。

   库单元的全局变量一般可以说明在保留字implementation后面。例如,下面的例程实现将两个编辑框中的整数相加,显示在第三个编辑框中。用到了一个整形的全局变量Count: 

  …implememntation 

  var

  Count : Integer; 

  procedure TForm1.AddClick(Sender:TObject);

  var

  FirstNumber,SecondNumber:Integer;

  begin

  Count := Count + 1;

  Counter.Text := IntToStr(Count);

  FirstNumber := StrToInt(Edit1.Text);

  SecondNumber := StrToInt(Edit2.Text);

  Edit3.Text := IntToStr(FirstNumber+SecondNumber);

  end;

  … 

   为了实现每按动一次按钮Count增加一次,必须对全程变量Count进行初始化处理。在程序库单元的结尾处,最后一个end.保留字之前,加入保留字initialization和初始化Count的代码: 

  …

  initialization

  Count := 0; 

   这样当事件处理过程AddClick被触发时,Count就会被增加一次,以表征计算次数。如果用面向对象编程,则Count可以说明成窗体的一个域,这在下一节中将有讲述。 

  2.1.8 编写一个过程或函数

   在您开发Delphi应用程序时,所需的大部分代码都编写在事件处理过程中,但有时仍然需要编写不是事件处理过程的函数或过程。例如,您可以把在多个事件处理过程中用得到语句编写成过程,然后任何事件处理过程、过程、函数都可以象调用已经存在的过程或函数一样直接调用它。好处是您只需编写一次代码,而且程序代码会比较清楚。

  2.1.8.1 一个自行编写的函数例程 

   在上文两个数相加的程序中,如果编辑框中无值,则会使得程序出错中断。为避免这种情况,编写下面的函数,检查编辑框中是否有值,如无值,则提醒用户输入: 

  function NoValue(AnEditBox:TEdit):Boolean;

  begin

  if AnEditBox.Text='' then

  begin

  AnEditBox.Color := clRed;

  AnEditBox.Text := '请输入整数值';

  Result := True;

  end

  else

  begin

  AnEditBox.Color := clWindow;

  Result := False;

  end;

  end; 

   NoValue函数会检查编辑框是否为空,如果是,编辑框颜色变红,并提醒用户输入一个整数,然后函数返回真值;Result保留字在Delphi中用来专指函数返回值。在上文的例程中加入NoValue函数: 

  procedure TForm1.AddClick(Sender: TObject);

  var

  FirstNumber,SecondNumber : Integer;

  begin

  if NoValue(Edit1)or NoValue(Edit2) then

  exit;

  Count := Count + 1;

  Counter.Text := IntToStr(Count);

  FirstNumber := StrToInt(Edit1.Text);

  SecondNumber := StrToInt(Edit2.Text);

  Edit3.Text := IntToStr(FirstNumber+SecondNumber);

  end; 

   如果其中的任何一个返回真值,则表示有编辑框空,会执行exit过程,使得当前的程序模块停止执行,并使得编辑框出现输值提示。当新值被输入后,再执行程序时,红色提示被隐去,恢复正常的计算状态。 

  2.1.8.2 过程和函数的标题 

   每一个过程或函数都以标题开始,其中包括过程或函数的名称和它使用的参数。过程以保留字procedure开始,函数以保留字function开始。参数位于括号里面,每一个参数以分号分隔。例如: 

  procedure validateDate(Day : Integer; month : Integer; Year : Integer);

   您也可以将相同类型的参数组合在一起,则上述过程头写作: 

  procedure ValidateDate(Day, Month, Year : Integer); 

   函数在标题中还多了一项:返回值的类型。下面是一个返回值为Double型的函数标题: 

  function CalculateInterest(principal,InterestRate:Double):Double; 

  2.1.8.3 函数和过程中的类型说明 

   一个过程或函数程序模块也含有说明部分和语句部分。说明部分可以包括类型说明、变量说明、常量说明等。除了Object Pascal语言中已经定义的类型之外,Delphi的应用程序还可以建立新的数据类型。类型说明部分有保留字type开始。下面是一些类型的说明: 

  type

  Tcount = Integer;

  TPrimaryColor = (Red,Yellow,Blue);

  TTestIndex = 1..100;

  TTextValue = -99..99;

  TTestList = array [TTestIndex] of TTestValue;

  TCharVal = Ord('A')..Ord('Z') ;

  Today = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,

  Sunday) ; 

   在类型标识符后面,用“=”号定义了新的类型。类型界定了变量的取值范围,例如,TCount类型的变量必须是整形值;一个TPrimaryColor类型的变量只能是red、yellow或blue等等。每一个类型的名称都是由字母T开始,这并非必须的,但它是Delphi的惯例,在区别类型名和标识符时非常有用。类型说明可以是局部的,也可以是全局的。如果您把它放在implementation后面,则表明对于库单元来讲,它是全局的,所有的事件处理过程和其他的过程、函数都可以调用它。如果类型是在过程中被说明的,则是局部的,离开这一过程,该类型将失效。

   一般来讲,在过程和函数中,任何类型说明都在变量说明之前,而任何变量说明都在常量之前。但是,只要遵从说明必须在过程与函数的标题之后,而且在程序代码之前,即是有效的。


上一篇:
  • 上一篇文章:
  • 下一篇
  • 下一篇文章: 没有了
  • 收藏此文到百度搜藏 百度搜藏| 新浪VIvi| 365key| Younote| 博采中心| 你好BLOG| 亿友网摘| 和讯网摘|
    相关文章    
    Delphi面向对象的编程方法(一)
    delphi twebbrowser构件编程方法详解
    Delphi的屏幕抓图技术的实现
    Delphi中数据的自动录入
    如何用Delphi创建快捷方式
    Delphi 2006新增特性解析
    Delphi图形显示技巧
    Delphi实现无边界窗体的移动
    Delphi 6开发ASP上传组件详解
    Delphi开发简单的WebMail程序
     
     
     
    最新文章
    普通文章 Delphi面向对象的编程方法(二)最新文章
    普通文章 Delphi面向对象的编程方法(一)最新文章
    普通文章 Photoshop制作逼真草地效果最新文章
    普通文章 windows xp局域网设置及无法访问最新文章
    普通文章 WinXP下的8步快速设置无线网络最新文章
    普通文章 安装和管理Win2008终端网关服务最新文章
    普通文章 Photoshop制作立体硅谷管道字最新文章
    普通文章 Photoshop制作困斗怪兽最新文章
    普通文章 六步优化Maxthon浏览器设置最新文章
    普通文章 Photoshop制作红外效果照片最新文章
     
    热门文章
    推荐文章 Fireworks网页界面综合设计实例详最新文章
    推荐文章 Oracle数据库配置中的常见错误代
    推荐文章 最新迅雷下载电骡资源技巧放送
     
     
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 

    版权所有2006-2008 龙腾教程网