DELPHI基础教程:异常处理与程序调试(一)[3]

作者&投稿:紫俭 (若有异议请与网页底部的电邮联系)
~

   对象异常类

  所谓对象异常是指非部件的对象引发的异常 Delphi定义的对象异常包括流异常 打印异常 图形异常 字符串链表异常等

   流异常类

  流异常类包括EStreamError EFCreateError EFOpenError EFilerError EReadError EWriteError EClassNotFound 它们的结构关系如下

  EStreamError

  | EFCreateError

  | EFOpenError

  | EFilerError

  | EReadError

  | EWriteError

  | EClassNotFound

  流异常在Classes库单元中定义

  流异常引发的原因如表

  表   流异常类及其产生原因

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  异常类 引发原因

  ─────────────────────────────────

  EStreamError 利用LoadFromStream方法读一个流发生错误

  EFCreateError 创建文件时发生错误

  EFOpenError 打开文件时发生错误

  EFilerError 试图再次登录一个存在的对象

  EReadError ReadBuffer方法不能读取特定数目的字节

  EWriteError WriteBuffer方法不能写特定数目的字节

  EClassNotFound 窗口上的部件被从窗口的类型定义中删除

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   打印异常类

  打印异常类EPrinter当打印发生错误时引发 它在printers库单元中定义 例如你的应用程序试图向一个不存在的打印机打印或由于某种原因打印工作无法送到打印机时 就会产生一个打印异常

   图形异常类

  图形异常类定义在Graphic 库单元中 包括EInvalidGraphic和EInvalidGraphicOperation两类

  EInvalidGraphic当应用程序试图从一个并不包含合法的位图 图标 元文件或用户自定义图形类型的文件中装入图形时引发 例如下面的代码

  Image Picture LoadFromFile( Readme txt )

  由于Readme txt并不包含一个合法的图形 因而将引发一个EInvalidGraphic异常

  EInvalidGraphicOperation当试图对一个图形进行非法操作时引发 例如试图改变一个图标的大小

  var

  AnIcon: TIcon;

  begin

  AnIcon := TIcon Create;

  AnIcon LoadFromFile( C:\WINDOWS\DIRECTRY ICO )

  AnIcon Width := ; { 引发一个图形异常 }

  …

   字符串链表异常

  字符串链表异常EStringListError EListError在用户对字符串链表进行非法操作时引发 由于许多部件(如TListBox TMemo TTabSet …)都有一个TStrings类的重要属性 因而字符串链表异常在部件操作编程中非常有用

  EStringListError异常一般在字符串链表越界时产生 例如对如下初始化的列表框

  ListBox Items Add( First item )

  ListBox Items Add( Second item )

  ListBox Items Add( Third item )

  则以下操作都会引起EStringListError异常

  ListBox Item[ ] := Not Exist ;

  str := ListBox Item [ ];

  EListError异常一般在如下两种情况下引发

   当字符串链表的Duplicates属性设置为dupError时 应用程序试图加入一个重复的字符串

   试图往一个排序的字符串链表中插入一个字符串

   部件异常类

   通用部件异常类

  通用部件异常类常用的有三个 EInvalidOperation EComponentError EOutOfResource 其中EInvalidOperation EOutOfResource在Controls单元中定义 EComponentError在Classes单元中定义

   非法操作异常 EInvalidOperation

  EInvalidOperation 引发的原因可能有

  ● 应用程序试图对一个Parent属性为nil的部件进行一些需要Windows句柄的操作

  ● 试图对一个窗口进行拖放操作

  ● 操作违反了部件属性间内置的相互关系等

  例如 ScrollBar Gauge等部件要求Max属性大于等于Min属性 因而下面的语句

  ScrollBar Max := ScrollBar Min ;

  将引发一个EInvalidOperation异常

   部件异常EComponentError

  引发该异常的原因可能有

  ● 在Register过程之外试图登录一个部件(常用于自定义部件开发中)

  ● 应用程序在运行中改变了一个部件的名称并使该部件与另一个部件重名

  ● 一个部件的名称改变为一个Object Pascal非法的标识符

  ● 动态生成一个部件与已存在的另一部件重名

   资源耗尽异常EOutOfResource

  当应用程序试图创建一个Windows句柄而Windows 却没有多余的句柄分配时引发该异常

   专用部件异常类

  许多部件都定义了相应的部件异常类 但并不是有关部件的任何错误都会引发相应的异常类 许多情况下它们将引发一个运行时间异常或对象异常

  下面列出几个典型的部件异常类

   EMenuError

  非法的菜单操作 例如试图删除一个不存在的菜单项 这一异常类在Menus库单元中定义

   EInvalidGridOpertion

  非法的网格操作 比如试图引用一个不存在的网格单元 这一异常类在Grids库单元中定义

   EDDEError

  DDE异常 比如应用程序找不到特定的服务器或会话 或者一个联接意外中止 这一异常类在DDEMan库单元中定义

   EDatabaseError EReportError

  数据库异常(EDatabaseError)和报表异常(EReportError) 在进行数据库和报表操作出现错误时引发 有关数据库的问题请读者参阅本书第二编

   小结

  在这一节中重点介绍了Delphi提供的异常类体系 我们力求给读者一个清晰 全面的印象 使读者能在自己的程序开发中实际使用它们 为便于理解我们也提供了一些简单的说明性示例 虽然在具体的使用中读者还可能会碰到许多问题 但意识到应该用异常类来增强程序的健壮性却是程序设计水平走上新台阶的标志

   异常保护

  确保回收分配的资源是程序健壮性的一个关键 但缺省情况下异常发生时程序会在出错点自动退出当前模块 因此需要一种特殊的机制来确保即使在异常发生的情况下释放资源的语句仍能被执行 而Delphi的异常处理正提供了这种机制

   需要保护的资源

  一般说来需要保护的资源包括

  ● 文件

  ● 内存

  ● Windows资源

  ● 对象

  比如下面一段程序就会造成 K内存资源的丢失

  var

  APointer : Pointer ;

  AInt ADiv: Integer ;

  begin

  ADiv := ;

  GetMem ( APointer )

  AInt := div ADiv ;

  FreeMem ( Apointer )

  end;

  由于程序从异常发生点退出从而FreeMem永远没有执行的机会

lishixinzhi/Article/program/Delphi/201311/25193




DELPHI基础教程:Delphi客户服务器应用开发(四)[1]
● 在桌面数据库结构的基础上 定义服务器上的元数据 ● 将数据从桌面转化到服务器中 ● 解决下列问题 ● 数据类型差异 ● 数据安全性和完整性 ● 事务控制 ● 数据访问权 ● 数据合法性 ● 锁定 Delphi提供了两种方法适化一个数据库 ● 使用Database Desktop工具 选择菜单Tools\/Utilities\/Copy to...

DELPHI基础教程:文件管理(二)[4]
子窗口主菜单包括File Function Directory三个菜单项 分别用于完成文件的基本管理功能 其它管理功能和目录管理功能 由于对话框界面设计很简单 这里不再进行赘述 读者可直接参考后面将给出的对话框界面图(图 )进行设计 子窗口的创建 布置和关闭 子窗口的创建 布置由父窗口的Windows菜单控制 其菜单项如下 ●...

Delphi6程序设计教程目录
第一部分:入门指南 第一章:轻松步入 Delphi6在这里,我们将介绍Delphi6的基本环境设置和操作,让你快速熟悉这款开发工具。第二章:Delphi6程序设计语言 深入理解Delphi6的语言特性和语法,为后续编程打下扎实基础。第三章:Object Pascal语言程序结构 学习Object Pascal语言的核心概念,包括类、对象和继承...

DELPHI基础教程:Delphi客户服务器应用开发(二)[3]
关于怎样使用BDE配置工具的详细介绍 可参见BDE用户指南或按运行BDE配置工具选择Help按钮显示在线帮助 在开始配置SQL环境前 必须已完成以下工作 ● 已安装SQL Links软件 ● 退出所有其它Borland应用程序 ● 在Windows 中打开应用程序组Borland Delphi ● 选择IDAPI配置工具图标 出现配置工作窗口后进入驱动程序管理...

DELPHI基础教程:Delphi图形图像编程(一)[3]
返回目录 DELPHI基础教程 编辑推荐 Java程序设计培训视频教程 J EE高级框架实战培训视频教程 Visual C++音频\/视频技术开发与实战 Oracle索引技术 ORACLE G数据库开发优化指南 Java程序性能优化 让你的Java程序更快 更稳定 C嵌入式编程设计模式 Android游戏开发实践指南 lishixinzhi\/Article\/program\/Delphi\/...

DELPHI基础教程:异常处理与程序调试(三)[1]
Pass Count编辑框用于设置通过次数条件 即只有当程序运行在该断点处通过设定次数时程序运行才在该断点处中止 这往往用于对循环体内语句的调试 有一点应引起注意的是 当Condition和Pass Count同时设置时 Pass Count是指满足条件的通过次数 lishixinzhi\/Article\/program\/Delphi\/201311\/25184 ...

DELPHI基础教程:Delphi开发数据库应用程序概述(一)[3]
Visual Query Builder 以可视化的方式建立SQL语句对数据库表和表中的记录进行操作 ━━━ SQL links使得Delphi数据库应用程序利用SQL语言访问驻留在远程服务器上的数据 这些服务器包括ORACLE Sybase Microsoft SQL Server Informix InterBase 当安装SQL Link驱动程序之后 SQL语句便可以直接操作服务器上的数据...

DELPHI基础教程:Delphi客户服务器应用开发(三)[4]
③ 将数据相关控制的DataSource属性设为DataSource部件的名字 这样 当用于TStoredProc部件和Active属性为True时 数据相关控制就能显示从存储过程返回的结果 返回目录 DELPHI基础教程 编辑推荐 Java程序设计培训视频教程 J EE高级框架实战培训视频教程 Visual C++音频\/视频技术开发与实战 Oracle索引技术 ...

DELPHI基础教程:Delphi自定义部件开发(一)[1]
Delphi除了支持使用可视化部件所见即所得地建立应用程序外 还支持为开发应用而设计自己的部件 在本章中将阐述如何为Delphi应用程序编写部件 这一章将达到两个目的 ● 教你如何自定义部件 ● 使你的部件成为Delphi环境的有机组合部分 Delphi部件原理 什么是部件 部件是Delphi应用程序的程序构件 尽管大多数部件...

DELPHI基础教程:文件管理(一)[2]
DateTimeToFileDate :把Delphi日期格式转换为DOS日期格式 FileDateToDateTime :把DOS日期格式转换为Delphi日期格式 FileGetDate :返回文件的DOS日期时间戳 FileSetDate :设置文件的DOS日期时间戳 文件读写 Read Readln :从文本或记录文件中读取变量 Write :将指定变量写入文本或记录文件 Writeln :将指定变量...

临淄区15849266070: 求Delphi中关于异常的处理语句 -
东郭纪炉甘: No.1:Try except //异常才来这里 end; No.2:Try finally //无论异常与否都来这里 end; No.3:DELPHI里没有下面这种用法 Try except finally end; 上面这种写法可以这样写:Try try except end; finally end;

临淄区15849266070: delphi中Exception类怎么使用 -
东郭纪炉甘: Exception 类是 delphi 的异常处理类,在Delphi中,每个异常都是 Exception 类的一个派生类.该类的使用通常如下:1、手动抛出异常 begin raise Exception.Create('异常信息说明文字'); end;2、定义异常、捕获异常 try Age :=StrToInt(Edit1....

临淄区15849266070: delphi 异常处理?
东郭纪炉甘: try table.delete; post;except showmessage('操作失败!'); table.cancel; raise;end;

临淄区15849266070: 在Delphi程序中try语句是什么语句,怎么用,请给指导. -
东郭纪炉甘: 异常处理语句,有两种 第一种 tryd := 6 div 0; //明显错误,会抛出异常.除数不能为0 excepton E:Exception doShowMessage(e.message); // 在这里处理你的异常,我这里显示出错误消息,当然可以自己定义 end;第二种 a := TStringList.create trya.add('1');Showmessage(a.strings[2]); //明显错误,程序异常中断不使用异常处理代码的将不会执行到a.free,如果使用了try ..finally..end; 不管异常是否出现都将释放资源 finallya.free; //释放 end;

临淄区15849266070: delphi 怎么处理一个异常
东郭纪炉甘: try begin 可能出现异常的代码 endexception on E: EDatabaseError do begin MessageBox(Handle, '这个数据库不存在,请再选择', '消息窗口', MB_OK + MB_ICONSTOP); ... end;end;

临淄区15849266070: Delphi异常处理
东郭纪炉甘: 其实没必要用try except 你可判断文本框是不是输入值即 if Trim(edit2.text)='' then begin ShowMessage('请输入值'); exit; else 你要写的代码 还有就是如果通过Edit2.text 给其赋值的话 要注意文本框的限制只能是数字 不然也会出错的

临淄区15849266070: DELPHI:QQ好友列表是用的什么控件 -
东郭纪炉甘: QQ大部分都是自绘的,除了浏览器相关的东西.参考资料当然有了,看Virtual Treeview那超过1M的源码就行了!

临淄区15849266070: delphi 关于异常处理的问题,请教各路大侠!!!
东郭纪炉甘: 如果没有except end 会以提示框的形式报错 举个例子 比如做一个除法 被除数是0 这是会报异常的 如果 有try except 那么 你可以 在里面用showmessage("你的数据有错误")这样友好的形式进行提示,当然也可以不提示 如果没有 try except 那么就会弹出一个全英文的系统提示框

临淄区15849266070: delphi 中判断异常处理的语句是什么? -
东郭纪炉甘: try {......} excepton E: Exception do begin showmessage(e.message); end; end;

临淄区15849266070: delphi获取程序异常信息 -
东郭纪炉甘: ======================补充回答===============如果是要求获取整个程序出错的地方,那么需要在工程文件里写异常处理代码:program Project1;usesForms, SysUtils,Unit1 in 'Unit1.pas' {Form1};{$R *.res}begintryApplication....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网