版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi7程序设计与实验指导张景安赵慧勤张叶娥傅文博编著第三章面向对象程序设计
面向对象程序设计(Object-orientedProgramming,简称OOP)方法是一种以模拟现实世界的概念来组织程序的全新方法,其立意于创建软件重用代码,具备更好地模拟现实世界环境的能力。能够支持面向对象程序设计的语言称之为面向对象的程序设计语言。Delphi是完全面向对象的,具有真正OOP扩展的可视化编程环境,将可视化编程与面向对象的开发框架紧密地结合起来。本章主要介绍面向对象的程序设计方法。3.1面向对象的可视化编程步骤面向对象的可视化编程一般包括以下步骤:l
创建应用程序。l
设计应用程序的界面,添加各窗体的组件对象。l
设置主窗体组件对象的属性。l
编写程序代码(主要是按钮的事件处理代码)。l
保存文件。l
编译、运行程序。【例3-1】创建一个工程,其中有一个窗体InputForm,用于输入教师基本信息。下面以例3-1为例,介绍面向对象的可视化编程的步骤。3.1面向对象的可视化编程步骤3.1.1建立新工程在Delphi7集成环境下选择File→New→Application菜单项,或使用工具条上New按钮,然后在NewItems窗口中选择Application,若此前未打开任何工程,确认后,FormDesigner窗口中会出现一个空白窗体Forml,在CodeEdit窗口中还会出现与Forml对应的代码单元Unitl。若先前已打开了工程并且没有对修改过的工程进行保存,则系统会提示是否保存等信息,处理完毕后系统将关闭该工程,然后新建一个应用程序。3.1面向对象的可视化编程步骤3.1.2设计程序界面InputForm窗体设计界面如图3-1所示,界面上包含五个标签(Label),用于显示输入提示信息,两个文本框(Edit),分别用于输入姓名、工龄;二个组合列表框(ComboBox),分别用于选择职称和部门的输入内容;三个按钮(Button),分别用于清除、显示和退出程序。InputForm窗体及其包含的组件属性见书表3-1。3.1面向对象的可视化编程步骤图3-1InputForm窗体设计界面3.1面向对象的可视化编程步骤3.1.3编写程序代码本例所要设计的是按钮组件对象的事件处理程序。双击窗体上的按钮,将打开代码编辑器,在begin和end之间输入如下各按钮的事件处理代码。(*“清除”按钮事件处理代码*)procedureTInputForm.BtnClearClick(Sender:TObject)begin(*清空各文本框*)
Edit1.Text:='';Edit2.Text:='';end;3.1面向对象的可视化编程步骤(*“显示”按钮事件处理代码*)procedureTInputForm.BtnShowClick(Sender:TObject);beginMessageDlg('这是显示教师基本信息的窗体',mtInformation,[mbOk],0);end;(*“退出”按钮事件处理代码*)procedureTInputForm.BtnExitClick(Sender:TObject);beginTInputForm.Close;//关闭TInputForm窗体end;3.1面向对象的可视化编程步骤3.1.4保存所有文件选择File→SaveAll选项,由于这个新建的工程还没有命名,所以首先会出现一个SaveAs对话框,默认的单元名是Unitl,用户可以用更具描述意义的名字代替它。在这里,使用InputUnit.pas进行命名。保存完单元文件后,又会出现SaveAs对话框,要求为工程文件命名,在这里,把它命名为InputPrj.dpr。注意:在进行程序设计前,应该先建立一个目录,用来存放工程文件,便于管理。3.1面向对象的可视化编程步骤3.1.5运行程序运行程序的方法主要有以下几种:l
打开Run菜单,选择Run子菜单。l
快捷键:F9。l
单击工具栏的按钮。其他的程序运行方式在本章第五节程序调试中将详细介绍。其运行后,在文本框中分别输入姓名(张红)、工龄(19),并选择职务(副教授)和部门(外语系)的值,如图3-2所示。按下“退出”按钮,将关闭“教师基本信息”窗口,结束程序的运行。3.1面向对象的可视化编程步骤3.1.6生成exe文件打开工程文件,选择菜单项Project→Build<工程文件名>,生成可执行文件,文件名与工程文件名同名,扩展名为.exe。可以通过双击.exe文件图标启动应用程序。例如:由工程文件InputPrj.dpr生成exe文件的过程是:选择菜单项Project→BuildInputPrj,生成InputPrj.exe文件,双击InputPrj.exe文件图标,即可运行应用程序。图3-2InputForm运行界面3.1面向对象的可视化编程步骤3.1.7制作安装包在完成了应用程序的设计后,就要将最终的产品打包发送给用户。目前一般使用安装程序InstallShield来制作安装盘。1.创建新的项目(1)进入Delphi7集成开发环境,编译并执行应用程序InputPrj.exe。(2)单击开始→程序→InstallShield→Express,打开InstallShieldExpressBorlandLimitedEdition窗口。(3)选择File→New命令,将弹出如图3-3所示的NewProject对话框。3.1面向对象的可视化编程步骤(4)单击按钮,弹出“SelectaFileName”对话框。输入安装程序名为“人事管理”,然后选择保存位置为C:\DocumentsandSettings\Administrator\Mydocuments\Mysetups,单击“保存”按钮,返回到图3-3所示的界面,单击“OK”按钮。图3-3NewProject对话框3.1面向对象的可视化编程步骤这样就在C:\DocumentsandSettings\Administrator\Mydocuments\Mysetups路径下创建一个名为“人事管理”的安装项目,如图3-4所示。图3-4制作新安装项目的界面3.1面向对象的可视化编程步骤2.制作安装程序的步骤整个安装程序的制作分为以下6个步骤。(1)组织安装项目。安装制作的第1步是配置项目中常见的设置,可再细分为以下几步。①GeneralInformation:配置整个项目的一些基本信息。选择OrganizeYourSetup\GeneralInformation,可以在屏幕的右方设置项目的基本信息。在这些基本信息中以下几个是必须设置的。●Subject:项目名。●ProductName:产品名。●Installdir:安装的目标文件夹。安装项目的基本信息的设定如图3-5所示3.1面向对象的可视化编程步骤图3-5基本信息的设定②Features:使整个项目中需要安装的文件按不同的用途分组。③SetupTypes:安装类型设置,用户根据不同的需求选择不同的安装类型。3.1面向对象的可视化编程步骤(2)指定项目文件。安装制作的第2步工作是向安装项目中添加文件。选择SpecifyApplicationData→Files,可以在屏幕右方的几个窗口向安装项目中添加文件,如图3-6所示。①在“Sourcecomputer’sfolders”窗口中定位到F:\Delphi61\第三章,此时“Sourcecomputer’sfiles”列表中显示了该文件夹下的文件。②鼠标单击“Sourcecomputer’sfiles”列表中的“InputPrj.exe”文件,将其拖到“Destinationcomputer’sfolders”的“[ProgramFilesFolder][INSTALLDIR]”上松开鼠标,这样在该文件夹中就多了一个名为“InputPrj.exe”的文件。若系统有数据库文件,用同样的方法将数据库文件拖动到“Database[DATABASEDIR]”文件夹中,本例中没有数据库文件。3.1面向对象的可视化编程步骤图3-6向安装项目中添加文件窗口(3)配置目标系统(ConfiguretheTargetSystem)。是让安装程序在安装过程中能够自动配置目标系统的一些参数,如桌面快捷方式、ODBC数据源(若有数据库文件)等。①选择ConfiguretheTargetSystem→Shortcuts/Folders,将显示如图3-7所示的视图。3.1面向对象的可视化编程步骤图3-7创建快捷方式的窗口②鼠标右击中间窗口的“Desktop”,选择弹出式菜单中的NewShortcuts命令,创建名为“InputPrj”的快捷方式(如图3-7所示)。③若有数据库文件,则还需要配置ODBC数据源:选择ConfiguretheTargetSystem→ODBCresources,系统显示了本机上存在的ODBC数据源,可以通过选择决定是否将其中的某些数据源安装到目标机器上。3.1面向对象的可视化编程步骤(4)设置安装界面(CustomizetheSetupAppearance)。安装制作的第4步工作是选择安装过程中将要显示的界面。选择CustomizetheSetupAppearance→Dialogs,将显示如图3-8所示的界面。选中需要显示的对话框前面的复选框。(5)设定安装所需的前提条件(DefineSetupRequirementsandActions)。安装制作的第5步工作主要是定义安装的前提条件,包含以下几个步骤:①Requirements:选择安装的软硬件环境。②CustomAction:选择需进行的安装操作。③SupportFiles:选择所支持的文件。3.1面向对象的可视化编程步骤图3-8安装过程中显示对话框的设置(6)制作安装程序的最后阶段(PrepareforRelease)。①选择PrepareforRelease\BuildYourRelease,编译安装项目。②选择PrepareforRelease\TestYourRelease,测试安装程序。3.1面向对象的可视化编程步骤③选择PrepareforRelease\DistributeYourRelease,发布安装程序。至此应用程序InputPrj的安装程序就制作完成。最后,测试安装程序,如图3-9所示。图3-9安装程序运行界面3.2对象和类的概念3.2.1对象对象是一种数据结构,是类的实例。了解对象,最关键的是掌握对象的特性。一个对象最突出的三个特征是封装性、继承性、多态性。定义了类之后,就可以创建该类的实例,即对象,通过对象来访问类的成员。对象声明的语法格式如下:varObjectName:Classname;其中Classname是已定义过的类名。例如:声明Tstudent类(已定义过)的对象Classmate可以用以下语句,varClassmate:Tstudent;
3.2.2类在ObjectPascal语言中,类和记录比较相似,也是一个构造类型,并且由属性和方法构成。其中属性又包括类的内部属性和外部属性,也就是供内部使用的一些数据变量和供外部使用的一些数据变量;方法则是该类或其实例可以操作的过程和函数。通常把类的内部属性称为字段,把字段、属性和方法统称为类的成员。类的定义形式如下:typeClassName=Class[(ParentClassname)]MemberListend;3.2对象和类的概念3.2对象和类的概念1.成员属性类的成员属性由保留字private、protected、public、published或automated来说明,通过这些保留字,可以控制对类中成员的访问权限。每个保留字的具体含义如下:private:私有成员,不能被类所在单元以外的程序访问。protected:保护成员,可以被该类的所有派生类访问,并且成为派生类的私有成员。public:公有成员,可以被该类以外的类访问。published:发行类型成员,它的访问权限基本与公有成员相同,只是在设计期间可以被访问。automated:自动类型成员,它的访问权限基本与公有成员相同,一般用在从TAutoObject类派生的类中。3.2对象和类的概念构造函数和析构函数是类定义中两个非常重要的函数。声明类的一个变量后,调用类的构造函数来进行一些初始化工作,再对类的实例—对象进行操作、使用,使用完毕,调用类的析构函数,删除创建的对象,同时释放相应的内存资源等。构造函数完成对象的创建和初始化工作,根据类的结构为类的对象分配内存空间,而且还可以打开文件或数据库,读取一些初始数据,或者控制一些设备进行复位等。定义构造函数使用保留字Constructor,通常函数名使用Create。如果在定义类的时候没有定义构造函数,系统会自动为该类生成一个默认的构造函数。3.2对象和类的概念析构函数的作用是将对象删除并释放相应的内存资源,此外还可以在这之前保存一些数据信息并关闭文件或数据库等,或者对一些设备进行复位。定义析构函数使用保留字Destructor,函数名为Destroy。如果在定义类的时候没有定义析构函数,则系统会自动为该类生成一个默认的析构函数。下面的例子说明了类的定义和使用。3.2.3方法方法是属于一个给定对象的过程或函数,反映的是对象的行为而不是数据。1.方法的声明和定义创建一个方法分两步:首先是在对象类型的声明中声明这个方法,然后再用代码来定义方法。方法的声明格式如下:3.2对象和类的概念type
TPerson=Class//人类publicname:String;//姓名
FunctionGetAge:Integer;//获取年龄procedureSetAge(a:Integer);//设置年龄privateage:Integer;//年龄end;3.2对象和类的概念2.方法的类型对象的方法能定义成静态(static)、虚拟(virtual)、动态(dynamic)或消息处理(message)。请看下面的例子:TMyclass=classProcedureMyStatic;//静态方法
ProcedureMyVitual;virtual;//虚拟方法
ProcedureMyDynamic;dynamic;//动态方法
ProcedureMyMessage(varM:TMessage);messagewm_SomeMessage;//消息处理方法end;3.2对象和类的概念3.方法的覆盖在ObjectPascal中利用覆盖一个方法来实现OOP的多态性概念。通过覆盖使一种方法在不同的派生类间表现出不同的行为。ObjectPascal中能被覆盖的方法是在声明时被标识为virtual或dynamic的方法。为了覆盖一个方法,在派生类的声明中用override代替virtual或dynamic。例如:能用下面的代码覆盖MyVirtual和MyDynamic方法。TmyclassChild=Class(TMyclass)procedureMyVitual;override;procedureMyDynamic;override;procedureMyMessage(varM:TMessage);messagewm_SomeMessage;end;3.2对象和类的概念4.方法的重载就像普通的函数和过程,方法也支持重载,使得一个类中有许多同名的方法带着不同的参数表,能重载的方法必须用overload关键字标识出来,可以不对第一个方法用overload。下面的代码演示了一个类中有三个重载的方法:Type
TSomeClass=classprocedureAmethod(i:Integer);overload;//方法的重载
procedureAmethod(s:String);overload;//方法的重载
procedureAmethod(d:Double);overload;//方法的重载end;3.2对象和类的概念3.2.4继承和多态1.继承性继承性是指一个子类能够从父类中获取属性和方法,继承的好处是能共享代码,在往子类中添加任何新内容之前,父类的每一个属性和方法都已存在于子类中。在定义一个实体的时候,可能会使用一些抽象的概念来概括一类事物。但是在现实生活中,接触到的都是某一类具体的事物。由于类具有继承性,所以可以在父类的基础上派生出子类,同时为了避免直接创建类的实例,可以把类定义为抽象类。在编程时,可以首先建立通用类,然后创建这些通用类所有专用功能的子类。3.2对象和类的概念2.多态性在ObjectPascal语言中定义的类的方法通常是“静态”的,也就是说在编译和链接阶段就确定了对象方法的调用地址。另外,还可以在运行时才确定对象方法的调用地址,这种调用函数的方式叫做多态性。在ObjectPascal语言中,多态性是通过virtual方法或dynamic方法实现的,方法的调用取决于对象的类型。3.3消息3.3.1消息机制1.什么是消息在Windows中,消息是被定义成如下形式的变体记录:TMessage=recordmsg:Word:caseIntegerOf0:(wparam:Word;lparam:Longint;result:Longint);1:(wparamLo:Byte;wparamHi:Byte;lparamLo:Word;lparamHi:Word;resultLo:Word;resultHi:Word);end;3.3消息2.消息处理方法注意:(1)组件Message;(2)组件Defaulthandler;(3)父类Message;(4)组件Defaulthandler;(5)TwinControl.Defaulthandler;(6)TControl.Defaulthandler;(7)TObject.Defaulthandler;图3-10Delphi消息处理过程表3.3消息表3-2处理消息的虚拟方法名称功能Tcontrol.WndProc定义了鼠标的基本消息,如点击和拖动。其他消息调用TObject.DispatchTwinControl.WndProc覆盖了TControl.WndProc,定义对聚焦、鼠标、键盘消息的响应。其他消息继承TControl.WndProcTcontrol.DefaultHandler处理Windows管理组件的文本串的消息:WM_GETTEXT,WM_SETTEXT及WM_GETTEXTLENGTHTwinControl.DefaultHandler通过调用API函数CallWindowProc来处理各种消息
3.3消息3.Windows消息分类Windows的消息分类如下:(1)窗口管理消息(Windows-management):当一个窗口状态改变时,由Windows送给应用程序。(2)初始化消息:当应用程序建立一个菜单或者对话框时发送。(3)输入消息:Windows发送的鼠标、键盘、滚动条、时钟等消息。(4)系统消息:用户操作系统的控制菜单、滚动条、边界时,由Windows发给应用程序的消息。(5)剪贴板消息。(6)系统信息修改消息。(7)组件操作消息:Windows发给子组件,如按钮、列表、编辑框等。(8)组件通知消息:通知组件的父窗口发生在该控制内的动作。(9)多文档MDI消息。(10)非客户区消息。(11)滚动条通知消息。3.3消息3.3.2发送消息Windows允许应用程序发送消息给自己、其他应用程序或者Windows本身。Windows的API函数SendMessage和PostMessage都可以实现发送功能(格式如下)。FunctionSendMessage(Wnd:HWnd,Msg,Wparam:Word;Lparam:LongInt):LongInt;FunctionPostMessage(Wnd:HWnd,Msg,Wparam:Word;Lparam:LongInt):Boolean;发送函数的参数Wnd指出接收消息的窗口句柄。其他参数都是TMessage的记录域。Delphi组件还允许使用Perform方法给组件自己发送消息,格式如下:FunctionPerform(Msg,Wparam:Word;Lparam:LongInt);LongInt;3.3消息3.3.3处理消息1.覆盖WndProc在程序中对WndProc进行覆盖,例如以下的定义和实现:procedureWndProc(varMessage:TMessage);override;procedureTMyControl.WndProc(varMessage:TMessage);beginif(Message.Msg<>WM_KeyDown)inheritedWndProc(Message);end;以上程序段屏蔽了键盘按下的消息。3.3消息2.使用关键字Message可以使用关键字Message来声明Windows消息处理的程序。这种消息方法的定义可以使用消息的记录名字。在消息处理的过程中,也可以继承父类的消息处理过程,只需Inherited就可以了,不必指明继承哪个函数。3.3消息TypeTMyControl=class(TComponent)…procedureKeyDownEvent(varMessage:TWMKeyDown);end;procedureTMyContro1.KeyDownEvent(varMessage:TWMKeyDown);beginShowMessage(IntToStr(Message.CharCode));Inherited;end;以上程序段输出被按下的键码。3.3消息3.覆盖DefaultHandler在程序中对Defaulthandler进行覆盖,例如以下的定义和实现:procedureDefaulthandler(varMessage:TMessage);override;它的实现同WndProc。4.Application.OnMessage可以通过给Application.OnMessage赋值的方法,使用自己编写的代码代替系统提供的消息处理过程。Application.OnMessage事件为应用程序的所有窗口查看消息队列。不要在这个事件中做耗时的操作,这会影响整个应用程序的速度和安全性。3.3消息3.3.4用户自定义消息Windows允许定义自己消息的名字。常数WM_USER代表了第一条新消息的序号。例如:constWM_USERl=WM_USER+0;自定义的消息序号范围在0x400—0x7fff,自定义的消息的使用方法同系统消息一样。3.4异常处理1.异常异常(Exception)是所有的应用程序不可避免的。受异常的影响,程序常常被迫终止或者不能及时释放资源。Delphi提供了异常处理机制,使应用程序能够处理几乎所有的异常情况。2.异常类(1)运行时间库异常类(RTLException)运行时间库异常类可以分为7类,见书表3-3,它们定义在SysUtils库单元中。(2)对象异常类所谓对象异常类是指非部件的对象引发的异常类。Delphi定义的对象异常类见书表3-4。(3)组件异常类Delphi定义的组件异常类有3种,见书表3-5。3.4异常处理3.4.2try…except子句try…except子句用于异常发生后,判断异常的类型,正确处理异常。在try…except语句中,except块包含异常发生时执行的动作。如果不发生异常,except块不被调用。try…except语法格式如下:try…{被保护语句}except…{异常处理语句(异常不发生,不处理)}end;3.4异常处理3.4.3try…finally语句try…finally语句用于异常发生时,要释放已分配的资源。try…finally语句无论是否发生了异常,程序都会执行释放资源的语句,如果发生了异常,try…finally不会处理异常,当finally代码被执行以后,异常被转到下一个合法的异常处理程序。try…finally的语法格式如下:try…{资源使用情况}finally…{释放资源}end;3.4异常处理3.4.4raise语句在try…except子句中,except处理了异常,然后便释放了异常对象,程序继续执行。但有时候,不需要释放异常对象,希望外层的异常保护程序能够继续处理该异常,那么就可以使用raise再次产生相同异常,退到外层保护程序处理。例如:try…{被保护语句1}try…{被保护语句2}exceptonESomethingdobegin…{为被保护语句2提供异常保护}raise;{再次提出异常}end;end;exceptonESomethingdo…;{所有的异常处理}end;3.5程序调试在开发应用程序过程中,编写的代码难免会出现一些错误。常见的错误有:(1)语法错误。这种错误是最常见的错误,它们可以被编译器检查出来,因此容易修改。(2)逻辑错误。程序员设计上的错误,这种错误较语法错误难发现,它们与程序员解决问题的思路有关。对于语法错误,Delphi的编译器会用高亮彩条标出错误的位置,并在编辑窗口底部显示错误信息;对于逻辑错误,就只能通过程序调试去发现和纠正。程序调试的主要内容可以概括为以下几个方面:l
控制程序的运行。l
断点的使用。l
监视变量和数据结构项的数值变化。3.5程序调试3.5.1调试的准备和开始在默认的状态下,调试程序不需要做任何准备,除非修改了Delphi7的配置。如果调试发生了问题,请按如下过程检查并将调试信息编译到程序中。首先激活集成调试器。激活的方法为:单击Tools→DebuggerOption…,打开DebuggerOptions对话框;然后选中窗口下部IntegeratedDebugging复选框(默认情况下该框选中)。在开始调试前,还需要将符号调试信息(SymbolsDebugInformation)编译进程序。在Delphi环境中编译运行程序时,符号调试信息能够使调试器在程序的源代码与编译器产生的机器代码间建立联系,这样在程序执行中可以同时查看对应的源代码。符号调试信息被存放在一个符号表中,当产生的调试符号信息供集成调试器使用时,编译器把调试符号表储存在每个相应的.dcu文件中。3.5程序调试
3.5.2程序运行的控制通过调试器(包括集成调试器)运行程序,当程序处于等待状态时调试器可以获得控制,主要的控制方式有以下几种:(1)全速运行(Run)(2)单步执行(StepOver)
(3)追踪执行(TraceInto)(4)运行到光标位置(RuntoCursor)(5)运行到断点(6)暂停执行(ProgramPause)(7)程序复位(ProgramReset)3.5程序调试3.5.3断点的使用1.设置断点在Delphi7中,通过设置断点,使程序在预先设置的代码上暂停,以便追踪变量值。设置断点有以下四种常用的方法:(1)单击CodeEditor中选定代码行左边的空白。(2)将光标放置在要设置断点的那一行,按F5键。(3)选择CodeEditor菜单中的“Debug→ToggleBreakPoint”选项。(4)选择Run菜单中AddBreakPoint子选项打开断点编辑对话框进行设置。2.断点的操作断点列表窗口(BreakPointListWindow)列出了所有断点所在的源文件名、行号、条件,以及已通过的次数。如果一个断点非法或失去功能,则在列表窗口中变灰。3.5程序调试图3-10断点列表窗口
(1)临时使某断点无效。(2)显示和编辑断点处的代码。(3)设置有条件断点和断点通过次数。3.5程序调试1.通过WatchList窗口监视变量或表达式监视列表窗口(WatchListWindow)显示程序运行中当前监视变量或表达式的值。选择View→DebugWindows→Watches选项,打开WatchList窗口,如图3-11所示。图3-11监视列表窗口当单步执行代码时,WatchList窗口动态更新,这样就可以看到每行代码对变量或表达式的影响。在WatchList窗口可以显示任何类型的变量或表达式,每个变量或表达式按适当的格式显示。WatchList窗口只能显示在作用域内有意义的变量值,变量在程序没有运行时显示Processnotaccessible,在断点处没有处于作用域内将显示Unknownidentifier。当WatchList窗口首次显示时,变量列表为空。3.5程序调试可以用以下几种方法将变量或表达式添加到WatchList窗口中:(1)在CodeEditor中选中一个变量或表达式,按Ctrl+F5组合键,Delphi7会弹出一个“WatchProperties”对话框,如图3-12。确认后,该变量就添加到WatchList窗口中。图3-12“WatchProperties”对话框3.5程序调试(2)从CodeEditor中选中一个变量或表达式,按下鼠标右键,从快捷菜单中选择Debug→AddWatchatCousor选项,把变量或表达式添加到WatchList窗口。(3)单击主菜单Run→AddWatch选项,打开“WatchProperties”对话框。输入要查看的变量或表达式。(4)从WatchList窗口选定一个变量或表达式,双击WatchList窗口或从WatchList窗口的快捷菜单中选择AddWatch或EditWatch。(5)当WatchList窗口为当前窗口时,按Ctrl+A键。3.5程序调试2.修改变量或表达式的值在WatchList窗口中只能查看变量,而在“Evaluate/Modify”(如图3-13所示)对话框允许快速查看并修改某个变量或表达式的值。
图3-13“Evaluate/Modify”对话框3.5程序调试为激活“Evaluate/Modify”对话框,可运行程序到某个断点,在CodeEditor窗口中选中要查看的变量,然后利用以下几种方法之一,激活“Evaluate/Modify”对话框。(1)按Ctrl+F7键,出现“Evaluate/Modify”对话框。(2)单击主菜单Run→Evaluate/Modify选项。(3)从CodeEditor的快捷菜单中选择“Evaluate/Modify”选项。激活“Evaluate/Modify”对话框后,可在“Expression”框中输入任何合法的ObjectPascal表达式,但该表达式不能包含任何函数调用。所查看的变量必须在当前断点的作用域内。单击“Evaluate”按钮,表达式的值显示在“Result”域中。在Newvalue栏中,输入新值后,单击“Modify”按钮,即可修改表达式的值。3.5程序调试3.显示函数调用当调试带多层嵌套函数,特别是有递归过程的复杂程序时,要准确记住调用哪个过程以获得程序中的特定指针是很困难的。CallStack窗口(如图3-23所示)提供了一个调用过程列表,减轻了这种负担。使用View→DebugWindows→CallStack选项,打开CallStack窗口。在CallStack窗口上面的项是当前函数,第一个函数下面的项是调用第一个函数,依次类推。在CallStack窗口中既显示函数名,又显示传递给它们的参数,这样就不需要在WatchList窗口或Evaluate/Modify对话框中建立这些变量。在CallStack窗口中查看函数的调用,可使用以下几种方法:(1)双击CallStack窗口中的函数,光标会自动停在CodeEditor中该函数的最后一行上。(2)选择快捷菜单中的ViewSource或EditSource选项。(3)使用Ctrl+I键。3.5程序调试3.5.5其他调试工具Delphi的内置调试器虽然功能很强大,但并不能胜任所有的任务,同时由于内置调试器在执行中引起程序环境的细微变化,所以可能影响
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵阳职业技术学院《房地产项目投资与融资》2023-2024学年第一学期期末试卷
- 2025年天津建筑安全员-C证考试(专职安全员)题库附答案
- 2025河南省安全员-C证考试(专职安全员)题库附答案
- 贵阳康养职业大学《社会危机管理》2023-2024学年第一学期期末试卷
- 广州中医药大学《普通化学及实验》2023-2024学年第一学期期末试卷
- 2025山西建筑安全员考试题库
- 广州医科大学《体育产业学》2023-2024学年第一学期期末试卷
- 广州现代信息工程职业技术学院《汽车拖拉机构造学》2023-2024学年第一学期期末试卷
- 2025云南省安全员-C证考试题库
- 2025江西省安全员A证考试题库
- 2024-2025学年乌鲁木齐市数学三上期末检测试题含解析
- 2025年初级经济师之初级经济师基础知识考试题库及完整答案【全优】
- 2024年度服装代言合同:明星代言服装品牌拍摄广告协议
- 五年高考真题(2020-2024)分类汇编 政治 专题19 世界多极化 含解析
- GB 30254-2024高压三相笼型异步电动机能效限定值及能效等级
- 非物质文化遗产拓印 课件
- 2022年杭州市建设行业职业技能竞赛装配式建筑施工员赛项技术文件
- 2022年部编版四年级道德与法治上册全册教案
- 管束干燥机使用说明书
- 三轴试验报告(共12页)
- 监控系统自检报告
评论
0/150
提交评论