procedure TForm1.Button1Click(Sender: TObject);
var
    x,y,z:integer;
begin
    x:=0;
    y:=0;
    z:=2;    z:=x div y;
end;这样尽然弹不出异常!!!!实在不解。

解决方案 »

  1.   

    真的很郁闷!!!!!!!!!!!!!!!!!!!!!!!!这个是帮助里的代码,也不行:
    Exceptions are handled within try...except statements. For example,try
      X := Y/Z;
    except
      on EZeroDivide do HandleZeroDivide;
    end;This statement attempts to divide Y by Z, but calls a routine named HandleZeroDivide if an EZeroDivide exception is raised.
      

  2.   

    div 和除号....你觉得这个是一样的么.....如果你认为是一样的...那你就继续发火吧.
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        x,y,z:integer;
    begin
        x:=0;
        y:=0;
        z:=2;    z:=x div y;
    end;
    因为你的变量Z在赋值之后并没有使用,所以编译器在优化的过程中把你的最后两条语句干掉了,最后两条语句被干掉后,编译器又发现对X,Y的赋值后并没有使用,于是对X,Y的赋值语句也同样被优化掉了,你的工程实际上是空的,当然不会出异常了,改成以下的看看,肯定会出异常procedure TForm1.Button1Click(Sender: TObject);
    var
        x,y,z:integer;
    begin
        x:=0;
        y:=0;
    //    z:=2;    z:=x div y;
        showmessage(inttostr(integer(z)));
    end;
      

  4.   

    to  firstshine(黑里透红) :真是厉害!!!其实我原先就已经用你的方法试了,只不过我找不到理由,原来是这么回事!!太感谢了。
    但我还有个问题:procedure TForm1.Button1Click(Sender: TObject);
    var
      x,y,z:integer;
    begin
      x:=10;
      y:=0;
      z:=1;
      try
        z:=x div y;
        ShowMessage(inttostr(z));
      except
         on e:EDivByZero do ShowMessage(E.ClassName);
      end;
    end;它能出异常,但却不能被捕获!!!
      

  5.   

    to firstshine(黑里透红) 
    ,我刚才又试了,把编译选项里的,Code Optimization 去掉后,果然下面的代码弹出异常:procedure TForm1.Button2Click(Sender: TObject);
    var
      x,y,z:integer;
    begin
      x:=20;
      y:=0;
      z:=5;
      z:=x div y;
      //ShowMessage(IntToStr(z));
      //x:=z+6;
    end;
      

  6.   

    to  firstshine(黑里透红):我的意思是,程序弹出异常对话框,被异常终止,却没有执行后面的on e:EDivByZero do ShowMessage(E.ClassName);
      

  7.   

    我试过了没有问题啊,可以看到Showmessage弹出来的提示窗口。如果你是在程序调试状态下的话,程序停下来之后,应该再按F9继续运行,就可以看到了