ExceptionHandling (Delphi)
Description
This example demonstrates exception handling to catch run-time errors.
Code
procedure TForm2.btIOErrorClick(Sender: TObject);
var
ExceptionObj : TObject;
begin
{
Try to write something onto the console--it will raise an
exception.
}
try
WriteLn('This will generate an error because there is no' +
' console attached!');
except
ExceptionObj := ExceptObject;
if ExceptionObj = nil then
MessageDlg('No exception', mtError, [mbOK], 0)
else
begin
MessageDlg(ExceptionObj.ToString, mtError, [mbOK], 0);
end;
end;
end;
{$OVERFLOWCHECKS ON}
{$OPTIMIZATION OFF}
{$HINTS OFF}
procedure TForm2.btOverflowErrClick(Sender: TObject);
var
b : Cardinal;
ExceptionPtr : Pointer;
begin
{
Simulate an overflow. Note: Enable the overflow
checking and disable optimizations, because the Delphi
compiler will not compile this code otherwise.
}
ExceptionPtr := nil;
try
b := $FFFFFFFF;
b := b * b;
except
ExceptionPtr := AcquireExceptionObject;
end;
// Check exception.
if ExceptionPtr = nil then
MessageDlg('No exception', mtError, [mbOK], 0)
else
begin
MessageDlg(TObject(ExceptionPtr).ToString, mtError, [mbOK], 0);
ReleaseExceptionObject;
end;
end;
{$HINTS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
procedure TForm2.btRuntimeErrorClick(Sender: TObject);
var
ExceptionObj : TObject;
begin
{ Simulate an access violation. }
try
System.Error(reAccessViolation);
except
ExceptionObj := ExceptObject;
if ExceptionObj = nil then
MessageDlg('No exception', mtError, [mbOK], 0)
else
begin
MessageDlg(ExceptionObj.ToString, mtError, [mbOK], 0);
end;
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
end;
Uses
- System.AcquireExceptionObject ( fr | de | ja )
- System.ExceptObject ( fr | de | ja )