- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 过程与函数 目录大纲 过程(procedure)与函数(function)是实现面向对象编程思想的重要手段。在Delphi中将各个功能模块做成函数或者过程的形式,供程序不同位置的调用,被调用的函数和过程也成为子程序。使用函数和过程不仅可以将一个大的、复杂的问题简单化,而且还可以使程序更加清晰、条理。 过程与函数的区别在于过程没有返回值,而函数有返回值。一般来说定义过程的目的是为了实现某个功能、执行某个操作,而定义函数的目的在于计算得到某个值。 7.1 过程 在Delphi中过程分为系统标准过程和自定义过程。系统标准过程是系统内部定义的,无需定义即可直接调用,如第二章所讲的过程EncodeDate过程,用户无需定义它,即可直接调用实现将年、月、日合并成为日期类型的功能。自定义过程也分为两类,即事件过程和通用过程。 事件过程的执行有两种方式,一种是事件驱动,即一个事件发生了,系统自动执行相应的事件过程,还有一种就是调用并执行事件过程。事件过程与对象有关,是Delphi应用程序中最重要的过程。 通用过程不依附于对象,通用过程一般用来执行某些操作,完成某个功能。有些功能代码在程序的多处出现,我们把它做成过程,在多处调用它,这样可以使得程序清晰、简洁,避免书写重复的代码,这就是我们设计通用过程的理由。为了加深对过程以及过程调用的理解,我们需要重新回顾一下事件过程的定义和调用。 7.1.1 事件过程的创建与调用 在对象监视器中选择某个对象(或者在窗体中单击该对象),然后在对象监视器的“Event”页中选择相应的事件并双击右边的空白区域,Delphi将自动产生一个默认的事件过程。事件过程的名称是对象名加上事件类型名,如Button1的OnClick事件对应的事件过程就是ButtonClick。 当一个事件发生后,Delphi会自动执行相应的事件过程。当然,一个事件过程也可以被多个事件甚至多个对象共享。方法是,首先为某个事件创建事件过程,然后在创建其它事件的事件过程时,从事件名称右边的下拉组合框中选择已经建立的事件过程名称即可。 共享事件的好处是,当共享事件过程的多个事件中任何一个事件发生时都会执行事件过程。有时候很多相似组件共享事件过程可以减少代码的编写。 【例7-1】在窗体上添加组件Image1~Image9共9个Image组件,添加Shape组件若干,用于做Image组件的边框。设计界面如图7-1所示。 本程序是两人对弈,双方在9格的棋盘上先后布棋,单击Image在Image上显示不同的图片(圆或者叉),哪方的三个图片先成一条直线,哪方获胜。 步骤如下: (1)将Image1~Image9的tag属性分别设置为1~9。 (2)定义全局变量: n:integer; flag:array[1..9]of integer; 说明: ① n用于控制步数,奇数和偶数步分别布“叉”棋和“圆”棋。 ② Flag数组用于判断某个位置的棋的性质: flag[x]= -1:表示x位置没有布棋; flag[x]=0:表示x位置布“圆”棋; flag[x]=1:表示x位置布“叉”棋。 (3)在TForm1.FormCreate事件过程中将所有位置的棋子置为没有布棋(flag[i]:=-1,I从1到9),将n置初值为0,以后每布一颗棋子n就加1。代码如下: procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin n:=0; //还没有布棋子 for i:=1 to 9 do flag[i]:=-1; //9个Image均没有布棋子 end; (4)在对象监视器中选定9个Image组件,在Event中选择OnClick事件并双击空白区域,编写如下代码: procedure TForm1.Image9Click(Sender: TObject); begin if (flag[(sender as timage).Tag]=-1) then //如果该位置没有布棋子 begin n:=n+1; if n mod 2=0 then //偶数布“圆”棋子 begin (sender as timage).picture.loadfromfile(yuan.bmp); flag[(sender as timage).Tag]:=0; //布子后,做上标记 end else //奇数布“叉”棋子 begin (sender as timage).picture.l
文档评论(0)