Marco Web Center |
Home: Code Repository: Mastering Delphi 5Project EXCEP2
Project StructureEXCEP2.DPRprogram Excep2; 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'); ShowMessage ('Program never gets here'); end; procedure TForm1.ButtonDivide1Click(Sender: TObject); begin Divide (10, 0); ShowMessage ('Exception has already been handled'); 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; // uses C ShowMessage ('Program never gets here:' + IntToStr (C)); end; procedure TForm1.ButtonRaise1Click(Sender: TObject); begin try {this procedure raises an exception} AddToArray (24); ShowMessage ('Program never gets here'); except {simply ignores the exception} on EArrayFull do ShowMessage ('Handle the exception'); end; ShowMessage ('ButtonRaise1Click call completed'); end; procedure TForm1.ButtonRaise2Click(Sender: TObject); begin {unguarded call} AddToArray (24); ShowMessage ('Program never gets here'); end; end. EXCEPF.DFMobject Form1: TForm1 Left = 201 Top = 170 Width = 316 Height = 177 ActiveControl = ButtonDivide1 Caption = 'Exceptions test' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = True PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 32 Top = 16 Width = 94 Height = 13 Caption = 'Handled exceptions' end object Label2: TLabel Left = 163 Top = 16 Width = 106 Height = 13 Caption = 'Unhandled exceptions' end object ButtonDivide1: TButton Left = 32 Top = 40 Width = 97 Height = 41 Caption = 'Divide' TabOrder = 0 OnClick = ButtonDivide1Click end object ButtonDivide2: TButton Left = 168 Top = 40 Width = 97 Height = 41 Caption = 'Divide' TabOrder = 1 OnClick = ButtonDivide2Click end object ButtonRaise1: TButton Left = 32 Top = 88 Width = 97 Height = 41 Caption = 'Raise' TabOrder = 2 OnClick = ButtonRaise1Click end object ButtonRaise2: TButton Left = 168 Top = 88 Width = 97 Height = 41 Caption = 'Raise' TabOrder = 3 OnClick = ButtonRaise2Click end end
|
||
© Copyright Marco Cantù, 1995-2020, All rights reserved |