C++Builder编程技巧与实例

更新时间:2023-05-28 20:38:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++Builder6 编程技巧与实例

第一部分 C++ Builder 6.0集成开发环境(IDE) C++ Builder 是一个面向对象、可视化的编程平台,应用于32位Windows操作系统应用程序的快速开发。用C++ Builder 编程,可以实现最小的代码开销,编写出高效率执行的Windows应用程序。C++ Builder 集成开发环境,即所谓的IDE(Itergrated Develeopment Environment),将使您充分享受快速应用程序开发环境RAD(Rapid Application Development)的魅力,在最短的时间内开发出令您自己也感到惊讶的Windows应用程序,马上您就会发现,哇,原来我也会做这些!全面提升您整体项目的开发效率,是我们共同的目标。

C++Builder6 编程技巧与实例

第一章 C++ Builder 6.0集成开发环境

1.1 集成开发环境简介

吹了半天,先来看看我们的“工作室”吧。等等,揉揉眼睛,怎么这么熟,Delphi吧!有这种感觉,那就恭喜您了。不错,C++ Builder正是Borland/Inprise公司Delphi产品的姐妹篇(C++版)。Delphi的神勇自不必说,强大的IDE,再加上C++语言的强大功能,那结果会是… …怎一个“爽”字了得。

图1.1 集成开发环境

上面是我们启动C++ Builder6.0 IDE后最先得到的一个界面,它基本包括以下内容:

1.1.1 代码编辑器(CodeEditor)

看到了吧,就那个里面有好多字母的家伙。不要问我一个窗口怎么够用?您尽可以在这里做您想做的任何事情。同时编辑几个代码文件小菜一碟。关键字(KeyWord)以粗体表示,或以不同颜色、字体区别不同意义的程序模块,在编辑中设置标签,设定调试断点,显示错

C++Builder6 编程技巧与实例

误信息,编辑状态信息显示……Boland的工程师们全都为您想周全了。什么?这几种颜色不够用,点点右键嘛,选中Properties(属性)栏,看看Color选项,够了吧!其实我是让您看看这个代码编辑器的设置窗口,由于这里的设置比较简单,您还是自己领略一下它的强大吧。别说我懒嘛,关键是我急于介绍更有用的功能,先把这里的说明留在后面吧。

图1.2 Code Editor参数设置

要编程序,您肯定少不了要输入诸如for,while,swich,if,类声明之类的东东,一堆格式搞的人心慌意乱,我们的精力可是要用在算法上的,忘了怎么办,问人?就这些问题,太不好意思了吧;翻书?好烦哪。别急,试试[Ctrl+J]吧,用键盘选中您想要的,或鼠标双击,帅呆了,全在上面,连命令也不用输了。如果您嫌这里的提示不够多,可以在Clode Insight页面上对它们进行增删和编辑,以及设置其显示状态,如图1.2右图所示。

图 1.3 语法提示窗口

您在编程的过程中少不了会声明n个变量、对象、函数等等等等,如果要在其他地方调用,就必须键入这些声明。我记性好,我找,亲爱的,您在哪里,您的芳名… …晕。为何不

C++Builder6 编程技巧与实例

试试这个法宝呢,[Ctrl+Space],您定会眼前一亮,您目前所在的Unit内声明的变量、对象、函数等等等等全在一个小小窗口里了,接下来,就是动动鼠标键盘了事。

喂!等等,您说的对不对呀,我按了,可是没反应!没关系,原来[Ctrl+Space]有时被Windows用作了输入法的开关组合键。到控制面板中查查输入法设置中的按键设置,将用到[Ctrl+Space]组合键的项目改为其它组合,如[Ctrl+Shift+Z],再回来试试,包好。这里注意,不同版本的Windows中输入法设置略有差异,劳您自己多研究。

图1.4 代码编辑器

图1.5 Diagram页面

这个可爱的小东东有时会在您输入一个对象名称再加以个‘.’或‘->’后自动弹出,并在其中列出此对象的所有属性或方法,供您享用,只需等待两秒钟,您就会看到您所需要的,我都不知怎么赞扬她了。如果她没出现,再试试[Ctrl+Space];如果还不出现,别急着骂电脑,拍桌子,它们其实很无辜的,八成是就是您的程序出错了(只有极少的例外)。

细心的您一定会发现图1.4中还有一个小窗口,何方神圣?请您输入一个对象方法或自己定义的函数名称,继续,再键入一个‘(’,您的函数参数格式,或对象方法的参数格式豁

C++Builder6 编程技巧与实例

然其中,万岁,我再也不用为这种问题去查那本厚厚的《C++库函数大全》了。当然,她所能提供的内容还不止此,自己体会吧。

假如您在程序中定义了一个变量i,您想在程序调试时知道此变量的值,不用像以前那样麻烦了,您只需在需要的位置设置一个断点,当程序停止在断点时,把鼠标停在i上即可(断点需要设置在I赋值以后),看到了吧,i = ???,如果正确,那恭喜您了,继续下一步。千万别忘了她,善加利用,事半功倍的。

在代码编辑器的下端您可以看到有一个Diagram页面,样子奇奇怪怪的,它其实是一个程序关系绘图工具。您可以将Object TreeView上的组件用鼠标拖放到这个页面中,用以生成一个组件之间的控制关系图,让您很清楚的知道程序中各个组件之间的连接控制关系,您还可以将生成的图像保存或打印,以作为所开发软件的说明文件。这个功能在数据库的编程中用来查看错综复杂的数据关系尤其有用。如图1.5所示。

1.1.2 代码浏览器(ClassExplorer)

知道IE Explorer吧,网上的好东西全靠它为您表演了。我们这里也有一个Explorer,当然不是上网用的,是看程序代码的。顾名思义,类浏览器。她会把您历尽千辛万苦所建立的所有组件、属性、方法、函数、变量统统建立成一个树状结构,仔细端详吧,这可是您的成果呀。点击左侧‘+’号展开节点,再双击一个变量试试,光标立即出现在您变量的声明处;如果要修改程序,寻找程序段,选右键菜单中的[Go To Implementation]选项,光标立即会转到您所声明函数的代码段上。

图1.6

接下来,在其中随便找一位对象,点击右键,您会看到图中的右键菜单。试试其中的New Field,New Properties,New Method吧,利用它们,您可以准确无误的在程序中声明变量、

C++Builder6 编程技巧与实例

属性、方法,也大该就是变量、函数、类之类的东东吧,唉,您可是赶上好年月喽,什么都不用自己做,只要点鼠标,想当年……惨那

!

图 1.7 定义变量

注意一个小技巧,如果您想要定义的不止一个对象,不要点击[OK]按钮,而是点击[Apply]按钮,这样做窗口就不会关闭,您就可以接着定义下一个对象了。另外,您可以在Field Name中一次输入多个变量名,中间用逗号隔开,这样就可以一次定义多个变量,当然它们的变量类型是相同的。

图 1.8 自定义属性(类对象) 图1.9 自定义方法(函数)

其它的选项,限于篇幅,又得劳您大驾了,反正也简单,难不住聪明绝顶的您。对于一些较为简单的变量、属性、方法,强烈建议您使用此功能定义。使用它,您可以在程序中准确无误的自动产生声明C++Builder变量、属性、方法的代码,并且,您可以很轻松的定义这些变量、属性、方法的作用域,继承关系,函数参数等等,在这里定义的对象,IDE会自动

C++Builder6 编程技巧与实例

对其进行维护,并将这些对象以树状结构显示在ClassExploer页面上,供您查看编辑,好处大大的。

1.1.3 窗体(Form)

整天听到“可视化编程”,“所见即所得”,耳朵都磨出茧子了,到底是什么东西呀?现在您看到了,就那个灰溜溜的一大片的家伙,Run一下,呵,没写一行代码就有的玩了,一个标准的Windows应用程序界面凸现眼前,CB(C++Builder简称,以后就这么叫了)就是好,原来Windows程序没什么难的嘛!(别说我吹牛,鼓励一下自己嘛。^_^)

图 1.9 窗体Form

Form是CB用来放置VCL组件的容器(Container),所有组件面板上的小按钮(先这么称呼吧)都要放置在Form内才能运行。您可以使用VCL组件在窗体上尽情发挥,设计您自己喜爱的应用程序界面。空的窗体继承自VCL的TForm组件,它包含众多属性,您可以在对象查看器中进行修改,也可以在程序中设置其属性,调用其方法。一个程序可以拥有众多窗体,增加新的窗体到工程中的常用方法是在菜单中选择[File]-[New]-[Form]选项;您也可以选择New快捷按钮,调出New Item对话框,选中Form页,来添加一些标准的常用窗体。

图 1.10 建立空白窗体

C++Builder6 编程技巧与实例

图 1.11 用继承关系重复建立工程中已有的窗体

New Item对话框中有一个Project1的页面,它是以当前打开的工程文件名来命名的,其中包含了当前工程中使用到的窗体,您可以在这里继承(Inherit)使用它们。继承使用后,当父窗体的设计发生变化时,子窗体也会随之发生相应变化;您可以在子窗体中加入其特有的组件,这时父窗体不会发生改变。如果您的工程中有几个窗体具有类似的界面和功能,它可给您带来一定的方便。

如果您设计了一个自己认为是“经典”的窗体,这时您可以在窗体上按下右键,选择[Add To Repository]选项,填写下面这个对话框,选择OK;如果您的Form还没有保存,系统会让您做的。再打开New Item对话框,Forms页面,这时您会发现它已经在这里了。从此,您的得意之作将在此获得“永生”,您可以随时用Copy拷贝、Inherit继承、Use这三种方法在任何工程中使用它,一劳而永逸啊,心里美滋滋的。

图 1.12 填写Add To Repository对话框

有人提意见:先别臭美了,Repository何许物件?答:对象宝库也。听听这名字,多帅,您的工程多半都得从这里开始,它里面包含了大量的工程模板框架,常过来转转,您就会知道的它的伟大了。

C++Builder6 编程技巧与实例

1.1.4 对象查看器(Object Inspector)

打开CB6,在屏幕的左侧会有一个长长的表格,这就是在CB编程中最常用到的对象查看器。表格里列出了当前处于激活状态组件的属性和事件。它基本上包含三项内容:

1.一个下拉列表,列出了当前处于激活状态中的所有组件,使用它可以在各个组件属性之间进行切换,如图 1.14(左1)所示。

2.一个属性(Properties)页面,用于列举组件的属性,如图 1.14(左2)所示。

3.一个事件(Evevts)页面,用于列举组件的方法函数,如图 1.14(左3)所示。 应该指出的是,并非组件的所有属性都会在这里列出,有些所谓的运行时属性,必须直接在程序中直接控制,您可以在On Line Help中找到它们,或者在程序中输入组件名称和‘->’ 后,使用[Ctrl+J]查看该组件所有可调用的属性和方法。您在属性页中所做的设置,可在程序运行时立刻得到反应,甚至有些属性(显示属性)在未运行程序时就可在窗体界面中看到修改结果,真正体现了可视化编程的效果。在Events页面中,选中您所需要的事件,双击,系统即会弹出代码编辑器,并自动产生该事件函数的调用代码,您要做的就剩下在其中填入自己的程序代码,“实现自我”了。

图 1.13 对象观察器

在对象查看器中,点击右键,调出快捷菜单。第一项View可以设置您想要查看的属性类型,默认为全部。Arrange可以设置您是按照名称查看,还是按照归类查看。Stay On Top可使您始终保证该窗口不被其它窗口覆盖。Properties可调出Object Inspector Properties对话框,在其中您可以设置对象查看器的显示风格,下拉窗口中已经为您准备了几种方案,例如:您以前用惯了VC++的界面,您尽可以按照图中所示设置。Dockable选项可使该窗口附着于其他窗口上。此处设置纯属个人爱好,需您自己把玩;图中所示,仅供参考(废话)。

C++Builder6 编程技巧与实例

图 1.15 对象观察器属性设置

1.1.5 对象树(Object TreeView)

CB6在启动时,左上角还有一个窗口,大名Object TreeView,我叫它对象树。它主要以树状结构显示当前活动对象容器(一般为Form、DataModule、Frame等)中的组件列表。当您

图 1.16 Object TreeView对象树

选中其中一项时,对象查看器的内容将随之变化。当组件较多时,您可利用它轻易实现对象之间的选择切换,特别是在数据库的编程中,可帮助您快速设置数据项,功能简易而实用。Object TreeView还有一些其它的功能,在以后的使用中您会慢慢体会到。

C++Builder6 编程技巧与实例

1.1.6 组件面板(Component Palette)

前面我们已多次提到组件(Component),那么组件到底是是何方神圣,师出何门?可以这么说,要在CB中作Windows应用程序,您就必然会用到组件,因为窗体本身就是一个组件嘛。CB共提供了150多种组件,它们均包含于VCL(Visual Component Library)可视化组件库中。组件主要分为两种,可视化和非可视化组件。前者在程序运行期是可见的,如Edit

图1.17 组件面板

组件;后者则不可见,如ActionList组件。CB之所以能称为快速应用程序开发环境(RAD),正是因为它将我们最常用到的一些功能单元打包成了组件,您只需要把要用到的组件按一定规则放置到您的工程中,再加以设置,便可使用其既定的功能。一般组件还包含许多属性和方法,您可以编写代码来调用它们,实现您既定的编程要求。我又忍不住要感叹了,您是赶上好时候喽,想当年… …惨哪。

虽然说了一大堆好处,可要在这么多的组件中找出一个有用的也确非易事。所幸CB体贴用户,顾怜天下苍生,为我们设计了这个组件面板。它将这一百多个组件分类放置在一个多页面选项卡上,使我们可以迅速找到所需之物。您只要点选一个组件按钮,而后再往窗体上指定的位置点一下,一个组件便添加到了工程中。如一次需要放置好几个同样的组件,先按下[Shift]键,再选取组件即可。放置完毕后,选图中所示的取消选择按钮即可。放置到窗体上的组件,可以直接到对象查看器中设置其属性;您甚至可以按下[Shift]键一次选中好几个组件,或用鼠标圈起一堆来,这时,对象查看器中就只剩下了这些组件的公共属性,一次搞定它们,爽哉!

图 1.18 组件快选菜单

C++Builder6 编程技巧与实例

图 1.19 组件面板属性对话框

多页面选项卡虽然好用,可毕竟组件太多,如果您使用到靠后面页面上的组件,就不得不点点点,点那右上角那两个小箭头来移动这个又臭又长的家伙,令人冒火。何以解忧,唯有右键。在选项卡上点右键,并展开Tabs项,您会看到长长的一栏,选您想要的,怎么样,感觉就是不一样。如果组件太多,页面上下端会显示两个小箭头,用鼠标指一指就可以翻页,快多了吧,如图1.18所示。

问题还没有结束,因为您还嫌烦,一大堆英文名称很是难受,那就看看快捷菜单中的Properties(属性)选项吧。它会调出Palette Properties对话框,如图1.19所示。在这里,您可以把您最常用的组件用鼠标左键“拖”到最前面,把不常用的组件“拖”到后面,或将其暂时隐藏(Hide)掉。如果您嫌组件页面的名称不好记,我改!中文名称怎么样,选中左侧内容,Rename,填表,OK,哈哈,现在您花上一点时间,就可以拥有一个“汉化”的组件面板了。再不要问我还有什么简单的方法… … 箱子底已经出来了,饶了我吧,告诉您这么多,我已经“心痛”了。^.^

1.1.7 快捷按钮及菜单(Speed Bar and Menu)

说了这么多,看看我们的“工作室” 里还有什么好东东。对了,老鼠拉风箱——这大头还在后头呢。这么多按钮,还有系统菜单,我们居然视而不见,唉,罪过罪过。赶紧研究。

在系统界面左上角靠下一点,好多按钮啊,不用我说,您肯定知道,快捷按钮(Speed Bar)。CB为想用户之着想,急用户之所急,将一些个您最常用的功能选项做成了快捷按钮的形式,您不用再进入层层菜单,一键搞定。其实,常用计算机的您对此不会陌生,差不多点的软件

C++Builder6 编程技巧与实例

都有这玩艺儿。什么?不知道它们的意思?Easy!将鼠标停在随意一个按钮上两秒钟,一个小小的Hint标签就会出现,意思在那明摆这不是。没出来?嗨,主窗口没激活嘛,点一下屏幕最上面最长的那个蓝条(一般是蓝的,您要把它改了,就随您的那个颜色把),再试试,不出来就是撞鬼了,关了机子快逃命去吧。其实这玩艺儿在组建面板上也有,在这儿一并说了罢。

图1.20 快捷按钮

就图中这么几个小按钮当然不一定和您的胃口了。在任何一个按钮上点下右键,得到快捷菜单,选中Customize(用户自定义)选项,您会看见下面图中的窗口:

图 1.21 快捷按钮用户自定义设置窗口

选中Command页面,您可以看到,左侧窗口中既是系统菜单的主选单,右侧为该选单

C++Builder6 编程技巧与实例

内的所有命令,也就是说,CB几乎为每一个命令都设置了一个快捷按钮,您可以把您常用的命令随时拖拉到快捷按钮的面板(ToolBar)上,也可以将快捷按钮面板上不需要的按钮拖回这个窗口。可这时,问题又出现了,拖很多按钮上去,界面会拥挤不堪,样子丑极了;有些按钮我设计时会用到,编译时就用不着了,这时我再把他们拖回去,烦不烦那;如果您的机子有好几个人使用,个人爱好不同,会打架的!(别说您素质很高,但总是令人不快的)别急,麻烦止于智者。看到下面这个东西了没有,看到了就来研究一下啦。

图 1.21 Desktop 桌面设置

首先,设置一个您喜爱的界面,桌面上的东西您就随便“拖”吧,注意了,我可没说光是按钮可以拖哦,其实我们在前面的一些快捷菜单中已经见过有一个Dockable选项了。这里的拖动操作,就是所谓的Dockable功能。如果此项打了钩,您就可以按下鼠标左键到处拖着随便放置了。想试试?那就让界面来个乾坤大挪移吧,如果您玩够了,再按一下保存按钮,系统回弹出一个对话框来,取个好记的名字,OK!以后,您只要点一下设置按钮,或左侧的下拉选单,选中您所要的,界面会马上变成您所需要的样子(除了工具栏)。除此之外,Dockable功能还有一个特别用途:出气的时候,将界面拖一个乱七八糟,折磨他一番,还是蛮解恨的。

^_^

图 1.22 保存界面

图 1.23 Dockable 功能演示

C++Builder6 编程技巧与实例

下面再来看看系统菜单。千万别说您找不着他,我会晕倒的。它包含了CB中几乎所有的操作命令,在以后的叙述和使用中,我们慢慢会加强对它的认识。这里就算先认识一下吧。

图 1.24 系统菜单

1.1.8 项目管理器(Project Manager)

首次安装完CB并启动它时,界面上我们是看不到这个好东东的。但我们可以在View菜单中找到它。因为他实在是太有用了,所以我把它“隆重”的请到了我的标准界面上。

图1.25 Project Manager(项目管理器)

看长相,它是我们已经见过的一个树状结构;论功能,它其实是一个项目文件管理器。在这里,我们可以看到目前所设计的项目中的所有文件(Files),甚至工程中所包含的系统文件,及其在系统中的位置(Path)。双击一个文件名,或右键调出快捷菜单,点Open选项,我们就可在代码编辑器(Code Editor)中轻松打开该文件内容,并进行编辑。点击工具栏上的New命令按钮,会弹出前面所提到的New Items对话框,并向工程中自动加入您选中的对象。如果您认为您的工程中有几个Unit文件无用了,千万不要跑到硬盘上找到它们,用Windows命令删除,因为这样做,您会发现当您再次打开工程文件时,系统会提示您该Unit文件不存在的错误信息。这是因为,CB中的大部分工程文件都是由CB自动生成和维护的,您在Windows系统中的操作,并不会反馈到CB的环境中。正确的做法是:在Project Manager中选中文件,然后点击工具栏上的Remove按钮,或快捷菜单中的Remove From Project选项。当然,如果您自己在程序的其它地方添加了调用此Unit文件中的对象的代码,您就仍然得手工修改它们了。这样做还有一个好处,CB仅仅是删除了工程和该Unit文件的连接,其文件本身还存在于硬盘上,只是在您的工程中不会再调用它了,如果您想反悔,还是有救的。可以这么说,CB如此良苦用心,只不过是想给您的工程文件以最好的可维护性和安全性,

C++Builder6 编程技巧与实例

其中所提供的文件路径信息(Path),也是我们在工程文件打包发行时必不可缺的资料,到时您就不用再把您的硬盘翻个底朝天,去寻找一个“存在的虚无”了。

图 1.26 Project Manager(项目管理器)的快捷菜单

刚才说了,您有机会去后悔的,可后悔药在哪里呢?右键点击Project1.exe,选中Add选项,接下来找到您要添加的文件,OK就行了,您会看到删掉文件又回来了,这个文件“还魂术”还可以吧。当然,您也可以利用它在工程中加入您以前在其它工程中设计好的Unit文件,方便了啦,嘻嘻。

在Project Manager中您还可以利用快捷菜单中的Make、Build、Compile选项,对选中的文件单独进行编译或链接,大大缩短编译时间。您甚至可以利用Add New Project选项或Add Existing Project选项,向当前项目中加入另外一个项目。

听我天花乱坠的说了半天,您说您还有一种情况,您既不想从工程中移除该文件,也不想加入新文件,您只是想给他改改名,CB这么好,怎么没有一个Rename的选项啊?但我说,这绝不是CB的软件工程师们的疏忽,随随便便的Rename,这对一个工程文件的安全和维护可没有任何好处。这里的文件名并不是随便起一个了事,而是要在程序中调用的一些对象的名称,您最好是象给您孩子取名一样认认真真(也许您还没有),尽量一次给她一个漂亮的名字。实在要改,CB有一个很安全的方案,看到快捷菜单中的几处Save As…和Save Project Group As选项了吗?其实他就是我们要的所谓Rename,为了安全起见,CB在您改名的时候,用这种方法强行为您在硬盘上保留了一个副本,别嫌罗嗦,这可是您的后悔药啊!想吃的时候,先把更名后的文件在Project Manager中除去(Remove File…选项),方法如前,再把CB为您保存的副本加进工程中来,得,完壁依然归赵了。限于篇幅,剩下的快捷菜单选项就有劳您自己研究了,谢谢!

再罗嗦一下,用了这么大篇幅,介绍一个文件更名的问题,无非是为了让您更好的维护

C++Builder6 编程技巧与实例

您的工程文件,请一定养成一个良好的习惯,尽量在Project Manager中进行文件操作,除非您对CB的文件管理有一个系统而全面的了解!

1.1.9 对齐工具面板与对齐对话框(Aligment Palette&Aligment)

窗体上放了一大堆可视的组件,乱七八糟,怎样才能让他们象阅兵式的方阵一样排列整齐,令人赏心悦目呢?您可能会说,用鼠标挪呗,窗体上不是有网格嘛,对齐就是了。要是组件少还好办,多了总归让人冒火。这时,请您打开系统菜单中的[Edit-> Align…]选项,

图 1.27对齐工具面板Aligment Palette

或选快捷按钮 ,来使使这个两个可爱的小东东吧。

图1.28 对齐对话框

首先,按下键盘上的[Shift]键,选取您想要对齐的组件,或用鼠标圈起您想要对齐的组件,然后在上面的对齐面板中选择相应的操作,所有选中的组件就会向您第一个选中的组件对齐。在Alignment对话框中,CB区分了水平和垂直两个方向的操作,多加试验,相信您很快就会领会其中的奥妙。

1.2 集成调试器的使用(Debuger)

如果有谁说,我编程从来都不需调试的,那我得恭喜他了,他这个脑子注定要被生物学家拿去研究了。一句玩笑,只是为了说明调试器(Debuger)在编程中必不可缺的地位。一个

C++Builder6 编程技巧与实例

优秀的程序员必然是一个程序除错高手。

CB正是基于这一点,为您提供了一个功能强大的“集成调试器”,让您在CB的集成开发环境(IDE)内可以直接对我们所开发的程序进行除错调试。它可以让您设置程序运行的断点(BreakPoint),在程序暂停运行后,您再一行一行的跟踪您要调试的代码;智能化的IDE可以在您键入程序代码时,随时检查出一些常见的语法错误,并在Messages窗口中作出提示;它还提供Call Stack和Threads调试窗口,让您可以彻底的跟踪程序的动向……

一般来说,程序中的错误包括三种类型,它们是:

1.语法错误(Syntax Error),这种错误在程序可以运行之前就可以较容易的除去,CB的Debuger是决不会轻易放过他们的。

2.运行期错误(Run-Time Error),这种错误会逃过Debuger的检查,但在程序运行时却会发生错误。这不难理解,比如某个数被零除。

3.逻辑错误(Logic Error),这时您会惊奇发现您的宝贝程序一切正常,但却得到了一个错误结果,就像种瓜得豆一样,令您哭笑不得。

针对以上情况,CB为您提供了六种调试窗口,及一些常用方法,帮您排忧解难。何以解忧,唯有Debuger(又来了,快说吧)!

1.2.1 断点设置(Set BreakPoints)

假如您的程序已经通过编译,却没有得到期望的运行结果,那就要进行第二种、第三种错误的调试了。首先,第一步,搓搓手,干洗脸,扭扭脖子,伸伸腰,打足精神,因为最艰苦的工作就要开始了。接下来,第二步,设置断点。

什么玩艺儿,断点,为嘛呀?因为您的工程项目一般来说都不会很小,从头至尾逐句逐行按着F7、F8运行程序太费劲,也没有必要。先根据错误提示信息,或所得错误结论,粗略判断出错的程序代码段,然后将程序在这里拦腰掐断,使程序运行暂停在出错段,然后再用F7、F8赶着程序逐行逐段的运行,慢慢检查错误,岂不是更好。其实,这也就是我们常说的断点跟踪。下表中列出了CB为您提供一些常用程序跟踪调试快捷功能键,以慰劳您听我胡扯半天:

快捷功能键

[F4]

[F5]

[F7]

[F8]

[F9]

[Ctrl]+[F2]

[Ctrl]+[Alt]+[Sys Req] 使用说明 运行程序至光标所在的一行 设置、取消断电 逐行运行,可跟踪至被调用函数内部,即Trace Into命令 逐行运行,不跟踪至被调用函数内部,即Step Over命令 运行程序,即Run命令 终止运行,即Program Reset命令 暂停运行,主要用来跳出循环

只说不干,等于白练,下面我们来试试。

将您的光标停在某一行上,按下[F5]一次,或在代码编辑器的左侧长条上相应的行前面双

C++Builder6 编程技巧与实例

击鼠标,就可设置一个断点,再次按下[F5]或双击鼠标,将取消此断点。断点设置完毕后,按[F9]运行程序,您将得到如图1.29所示的一个花花绿绿的窗口。下面介绍各个图例的含义:

图 1.29 断点设置

大红杠杠表示此行是断点,它的前面总是有一个圆点,用来表示此断点的状态。红色+一个“对号”表示当前断点处于Enable(激活)状态;灰色圆点表示此断点处于Disable(关闭)状态,这时,此行同时被标记为绿色长条;红色圆点+“X”表示此断点设置无效,也就是您将断点设错了地方,此行同时被标记为大便色(好恶心的词,没办法,错了本来就恶心,这样说只是为了加深记忆嘛,忍忍吧)。

细心的您一定会发现,Debuger窗口上还比平时多了许多蓝色小点,它们是用来标记一个独立行的,蛮可爱,我叫它“蓝精灵”。凡是没有“蓝精灵”的地方都是不可以设置断点的。这也就是上面那行为什么会变成大便色(少来啦)的原因了。

蓝杠杠是当前执行语句,同时前面还加有一个绿色小箭头作为标记,当您使用[F7]或[F8]执行程序时,您会同时看到这个蓝条也会一行一行跟着往前跳,这样我们就可以很清楚的知道程序目前执行到哪一行了。

现在就剩下那个深绿色的小书签(BookMark)了。它其实并非专门用来做Debuger,真正的书签谁都用过,就是个纸片嘛,夹在书中以后好找一点。这里是一个电子书签,虽然没真的那么漂亮,但功能是一样的。在某一行上点右键,或者在某一个断点上点右键,在右键菜单中选择Toggle BookMarks选项,然后从0~9给一个编号,一个书签就设定好了,如图

1.30中图所示。下次要找,在代码编辑器上随意右击,选中右键菜单中的Goto BookMarks选项就行了,如图1.30中右图所示。

本来说到这里就可以打住了,可我总觉得意犹未尽,就这样设置的断点也太没意思了,

C++Builder6 编程技巧与实例

CB既然为我辈推崇,那就再给您露两手吧。

请把您尊贵的鼠标放到一个小圆点上吧,请智慧的CB赋予我力量!

如果您的代码编辑器正处于激活状态(程序运行时暂停),过两秒钟,您会看到一个小小的Tip窗口,里面有Condition、Actions、Group、Pass Count,都什么东东?

图1.30 Debuger的快捷菜单

图 1.31 断点属性设置

C++Builder6 编程技巧与实例

点右键,您将得到图1.30中左图所示的菜单,第一项,Enabled,您可以使用它激活或关闭一个断点。第二项,Breakpoint Properties …,断点属性设置,您将得到图 1.31所示的一个对话框,在这里,您将使您的断点练就神功。

或许您看到的窗口比我的小,点一下Advanced按键,您会立刻看到图中的窗口。接下来,我们一起来看看每一项的含义:

1.Filename:当前文件名;

2.Line Number:断点所在行号;

3.Condition:运行条件式。您可以在这里输入一个条件表达式,当程序执行到此断点时,首先会执行这个条件表达式,如果其值为“真”,则程序在断点暂停运行。

4.Pass Count:断点计数器,默认值为“0”。如果您将其设置为其它数值,如3,则程 序在执行此断点4次后在断点暂停运行。此功能一般用于循环语句中的除错。

5.Group:断点分组。如果您正在调试一个相当大的程序,您肯定会设置很多断点。在不同的调试阶段,断点设置也不同。逐个的去把不用的断点Disable掉,太麻烦,那就分组吧。程序中的断点都有Group属性,您可以把属于同一组断点的Group属性名设为相同,然后将这一组Disable掉,岂不是很方便。

6.Advanced:打开高级设置项。

7.Acion:设置断点所执行的动作。

8.Break:这是传统意义上的断点所执行的动作,及暂停程序运行。

9.Ignore subsequent exceptions:忽略并发的意外事件,程序将不在意外事件发生时中止运行。

10.Handle subsequent exceptions:处理所有并发的意外事件,当意外事件发生时中止程序运行。您可以成对使用Handle subsequent exceptions和Ignore subsequent exceptions以精确抓取某一个程序代码段内的错误信息。

11.Log Message:日志信息,当您在此填入您自己关于此断点的提示信息内容时,此项功能自动激活,您可以把它当作关于此断点的注释来使用。这里的信息将在断点被执行后写入Evevt Log文件,您可以使用系统菜单的View->Debug Windows->Evevt Log命令来查看该文件的内容。

图 1.32 事件日志查看器Evevt Log

本文来源:https://www.bwwdw.com/article/3dr4.html

Top