Marco Web Center |
Home: Code Repository: Mastering Delphi 5Project EXCEP
Project StructureEXCEP.DPRprogram Excep; uses Forms, ExcepF in 'ExcepF.pas' {Form1}; {$R *.RES} begin Application.CreateForm(TForm1, Form1); Application.Run; end. EXCEPF.PASunit ExcepF; interface uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ButtonDivide1: TButton; ButtonDivide2: TButton; ButtonRaise1: TButton; ButtonRaise2: TButton; Label1: TLabel; Label2: TLabel; procedure ButtonDivide1Click(Sender: TObject); procedure ButtonDivide2Click(Sender: TObject); procedure ButtonRaise1Click(Sender: TObject); procedure ButtonRaise2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} {new type of exception} type EArrayFull = class (Exception); {protected version of the div operator} function Divide (A, B: Integer): Integer; begin try {the following stetement is protected because it can generate an error if B equals 0} Result := A div B; except on EDivByZero do begin Result := 0; MessageDlg ('Divide by zero corrected', mtError, [mbOK], 0); end; on E: Exception do begin Result := 0; MessageDlg (E.Message, mtError, [mbOK], 0); end; end; end; {fake procedure: the array is always full} procedure AddToArray (N: Integer); begin raise EArrayFull.Create ('Array full'); end; procedure TForm1.ButtonDivide1Click(Sender: TObject); begin Divide (10, 0); end; procedure TForm1.ButtonDivide2Click(Sender: TObject); var A, B, C: Integer; begin A := 10; B := 0; {generates an exception, which is not handled by us} C := A div B; {we have to use the result, or the optimizer will remove the code and the error, too} Caption := IntToStr (C); end; procedure TForm1.ButtonRaise1Click(Sender: TObject); begin try {this procedure raises an exception} AddToArray (24); except {simply ignores the exception} on EArrayFull do; {do nothing} end; end; procedure TForm1.ButtonRaise2Click(Sender: TObject); begin {unguarded call} AddToArray (24); end; end. EXCEPF.DFMobject Form1: TForm1 Left = 166 Top = 145 Width = 389 Height = 216 ActiveControl = ButtonDivide1 Caption = 'Exceptions test' Font.Charset = ANSI_CHARSET Font.Color = clBlack Font.Height = -12 Font.Name = 'Arial' Font.Style = [] PixelsPerInch = 96 TextHeight = 15 object Label1: TLabel Left = 37 Top = 16 Width = 109 Height = 15 Caption = 'Handled exceptions' end object Label2: TLabel Left = 213 Top = 16 Width = 123 Height = 15 Caption = 'Unhandled exceptions' end object ButtonDivide1: TButton Left = 40 Top = 48 Width = 113 Height = 49 Caption = 'Divide' TabOrder = 0 OnClick = ButtonDivide1Click end object ButtonDivide2: TButton Left = 224 Top = 48 Width = 113 Height = 49 Caption = 'Divide' TabOrder = 1 OnClick = ButtonDivide2Click end object ButtonRaise1: TButton Left = 40 Top = 112 Width = 113 Height = 49 Caption = 'Raise' TabOrder = 2 OnClick = ButtonRaise1Click end object ButtonRaise2: TButton Left = 224 Top = 112 Width = 113 Height = 49 Caption = 'Raise' TabOrder = 3 OnClick = ButtonRaise2Click end end
|
||
© Copyright Marco Cantù, 1995-2020, All rights reserved |