CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

如何 捕捉 程序或所有控件 发出的所有异常 信息 , 并 屏闭这些信息 换成 自己的信息 ??????????? 急!!!!!!!!!!

楼主fsqman(q)2006-06-04 10:37:01 在 Delphi / 语言基础/算法/系统设计 提问

如何   捕捉   程序或所有控件   发出的所有异常   信息   ,   并   屏闭这些信息   换成   自己的信息   ???????????  
   
  还有如何   如何知道是那一个控件发出的异常??? 问题点数:10、回复次数:10Top

1 楼lzg827(小刚)回复于 2006-06-04 11:29:34 得分 0

所有???  
   
  这个好像不在可能吧  
  我觉得只能自己一个一个的写  
  try  
          //可能出错的代码  
  except  
          //自己的提示  
  end;  
   
  另:在exe下,或者被调用的时候才会被捕捉到错误  
  Top

2 楼fsqman(q)回复于 2006-06-04 12:08:27 得分 0

upTop

3 楼fsqman(q)回复于 2006-06-04 12:43:45 得分 0

自己写代码当然可以用    
  try  
          //可能出错的代码  
  except  
          //自己的提示  
  end;  
   
  捕捉异常,   但对于   程序和控件   内部   发出的异常就不知道如何   捕捉了   !!  
   
  举例:  
  dbgrid   设置了一个列,但这个列在   sql   语句是   没有的,运行时   dbgrid   就会用英文抛出一个异常信息说没有这个列等,   对于控件   内部   发出的异常,如何   捕捉   异常   信息   ,   并   屏闭这些信息   换成   自己的信息???  
   
   
  Top

4 楼fsqman(q)回复于 2006-06-04 16:27:06 得分 0

upTop

5 楼lzg827(小刚)回复于 2006-06-04 16:34:42 得分 0

to:fsqman(q)    
        我明白你的意思  
        应该是写在源码里面,然后重新编译  
        不过工作量嘛,难说了。  
        嘿嘿Top

6 楼happyggy(Delphi<-&&->java)回复于 2006-06-04 16:56:53 得分 10

TestException   =   class(   Exception)  
   
      TTest   =   class  
      private  
          _Err:   integer;  
          _ErrMsg:   string;  
          _ErrPos:   integer;  
      protected  
          procedure   MakeErrMsg(Err,   Para,   Pos:   integer);  
          procedure   RaiseErr(Err,   Para,   Pos:   integer);  
   
      public  
          property   Err:   integer   read   _Err;  
          property   ErrPosition:   integer   read   _ErrPos;  
          property   ErrMsg:   string   read   _ErrMsg;  
      end;  
  procedure   TTest.MakeErrMsg(Err,   Para,   Pos:   integer);  
  begin  
      _Err   :=   Err;  
      case   Err   of  
          ERR_INVALID_CHAR:  
              begin  
                  _ErrMsg   :=   '非法';  
              end;  
          ERR_INVALID_CHAR_COMMA:  
              begin  
                  _ErrMsg   :=   '非法';  
              end;  
          ERR_NO_BRACKET_R:  
              begin  
                  _ErrMsg   :=   '';  
              end;  
          ERR_NULL_STR:  
              begin  
                  _ErrMsg   :=   '空字符串';  
              end;  
          ERR_INVALID_IV_NAME:  
              begin  
                  _ErrMsg   :=   EXCEPTION_INVALID_IV_NAME;  
                  if   (Para   >=   AO_POWER)and   (Para   <   _slCh.Count)   then  
                      _ErrMsg   :=   _ErrMsg   +   ':   与函数同名'  
                  else  
                      _ErrMsg   :=   _ErrMsg   +   ':   不能包含运算符及标点符号'  
              end;  
          ERR_INVALID_IV_NAME_CANT_BE_DIGIT:  
              begin  
                  _ErrMsg   :=   EXCEPTION_INVALID_IV_NAME_CANT_BE_DIGIT;  
              end;  
          ERR_INVALID_OPERATOR:  
              begin  
                  _ErrMsg   :=   '非法的运算符:   ';  
              end;  
          ERR_INVALID_FUNCTION_ARG:  
              begin  
                  _ErrMsg   :=   '非法的函数参数:   '   +   _slCh.Strings[Para];  
              end;  
          else  
              begin  
                  _ErrMsg   :=   '未知错误';  
              end;  
      end;  
  end;  
   
   
  procedure   TTest.RaiseErr(Err,   Para,   Pos:   integer);  
  begin  
      MakeErrMsg(Err,   Para,   Pos);  
      raise   MathParserException.Create(_ErrMsg);  
  end;Top

7 楼fsqman(q)回复于 2006-06-04 17:36:52 得分 0

请问楼上的具体是怎样用的????Top

8 楼fsqman(q)回复于 2006-06-04 17:49:27 得分 0

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls,   Mask,   DBCtrlsEh,   DB,   ADODB,   Grids,   DBGridEh,   ExtCtrls,  
      SUIDBCtrls,   DBCtrls,   ComCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          ADODataSet1:   TADODataSet;  
          DataSource1:   TDataSource;  
          DBComboBoxEh1:   TDBComboBoxEh;  
          CheckBox1:   TCheckBox;  
          DBEdit1:   TDBEdit;  
          ADODataSet2:   TADODataSet;  
          DataSource2:   TDataSource;  
       
       
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
   
   
      TestException   =   class(   Exception)   ;  
   
    type  
      TTest   =   class    
      private  
          _Err:   integer;  
          _ErrMsg:   string;  
          _ErrPos:   integer;  
      protected  
          procedure   MakeErrMsg(Err,   Para,   Pos:   integer);  
          procedure   RaiseErr(Err,   Para,   Pos:   integer);  
   
      public  
          property   Err:   integer   read   _Err;  
          property   ErrPosition:   integer   read   _ErrPos;  
          property   ErrMsg:   string   read   _ErrMsg;  
      end;  
   
   
  var  
      Form1:   TForm1;  
        a:bool;  
  implementation  
        uses   unit2;  
  {$R   *.dfm}  
   
   
  procedure   TTest.MakeErrMsg(Err,   Para,   Pos:   integer);  
  begin  
      _Err   :=   Err;  
      case   Err   of  
          ERR_INVALID_CHAR:  
              begin  
                  _ErrMsg   :=   '非法';  
              end;  
          ERR_INVALID_CHAR_COMMA:  
              begin  
                  _ErrMsg   :=   '非法';  
              end;  
          ERR_NO_BRACKET_R:  
              begin  
                  _ErrMsg   :=   '';  
              end;  
          ERR_NULL_STR:  
              begin  
                  _ErrMsg   :=   '空字符串';  
              end;  
          ERR_INVALID_IV_NAME:  
              begin  
                  _ErrMsg   :=   EXCEPTION_INVALID_IV_NAME;  
                  if   (Para   >=   AO_POWER)and   (Para   <   _slCh.Count)   then  
                      _ErrMsg   :=   _ErrMsg   +   ':   与函数同名'  
                  else  
                      _ErrMsg   :=   _ErrMsg   +   ':   不能包含运算符及标点符号'  
              end;  
          ERR_INVALID_IV_NAME_CANT_BE_DIGIT:  
              begin  
                  _ErrMsg   :=   EXCEPTION_INVALID_IV_NAME_CANT_BE_DIGIT;  
              end;  
          ERR_INVALID_OPERATOR:  
              begin  
                  _ErrMsg   :=   '非法的运算符:   ';  
              end;  
          ERR_INVALID_FUNCTION_ARG:  
              begin  
                  _ErrMsg   :=   '非法的函数参数:   '   +   _slCh.Strings[Para];  
              end;  
          else  
              begin  
                  _ErrMsg   :=   '未知错误';  
              end;  
      end;  
  end;  
   
   
  procedure   TTest.RaiseErr(Err,   Para,   Pos:   integer);  
  begin  
      MakeErrMsg(Err,   Para,   Pos);  
      raise   MathParserException.Create(_ErrMsg);  
  end;  
   
   
  但编译时出错,信息如下:  
   
  [Error]   Unit1.pas(85):   Undeclared   identifier:   'ERR_INVALID_CHAR'Top

9 楼fsqman(q)回复于 2006-06-05 17:16:08 得分 0

upTop

10 楼happyggy(Delphi<-&&->java)回复于 2006-06-05 18:24:01 得分 0

ERR_INVALID_CHAR,ERR_INVALID_CHAR_COMMA,...  
  这些都是自己定义的错误代号,它代表一类错误。  
   
  dbgrid   设置了一个列,但这个列在   sql   语句是   没有的,运行时   dbgrid   就会用英文抛出一个异常信息说没有这个列等,   对于控件   内部   发出的异常,如何   捕捉   异常   信息   ,   并   屏闭这些信息   换成   自己的信息???  
   
  就在你说的那步操作中用  
  try  
  except  
  end  
  捕获并根据错误代号显示你定义的报错信息。  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:fsqman
  • happyggy

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo