Creo este hilo para enseñarles cómo hacer una ventana personalizada para las capturas de excepciones, parecido a algo como esto (Lo puedes personalizar a tu gusto):

Paso 1Vamos a crear un formulario que será la ventana de aviso como las imágenes anteriores, éste es el código de dicho formulario:
Nombre de la unidad (Unit):
Aviso.
Nombre del Formulario (Form):
FAviso.
unit Aviso;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, pngimage, ExtCtrls;
type
TFAviso = class(TForm)
Label1: TLabel;
Image1: TImage;
btDetalle: TButton;
btCerrar: TButton;
mError: TMemo;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btCerrarClick(Sender: TObject);
procedure btDetalleClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FAviso: TFAviso;
implementation
{$R *.dfm}
procedure TFAviso.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TFAviso.btCerrarClick(Sender: TObject);
begin
Close;
end;
procedure TFAviso.btDetalleClick(Sender: TObject);
begin
if btDetalle.Caption = 'Detalles >>' then
begin
FAviso.Height := 243;
btCerrar.Top := 176;
btDetalle.Top := 176;
mError.Visible := True;
btDetalle.Caption := '<< Detalles';
end else begin
FAviso.Height := 152;
btCerrar.Top := 88;
btDetalle.Top := 88;
mError.Visible := False;
btDetalle.Caption := 'Detalles >>';
end;
end;
end.
Paso 2En este paso vamos a crear un procedimiento en el Form principal de tu aplicativo, lo llamaremos
Mostrar:
procedure Mostrar(cMensaje,cError: string);
begin
FAviso := TFAviso.Create(Application);
FAviso.Label1.Caption := cMensaje; {Label}
FAviso.mError.Text := cError; {Memo}
FAviso.ShowModal;
Freeandnil(FAviso);
end;
cMensaje: Es el mensaje General del formulario asignado por ti.
cError: es el mensaje de error por defecto de la excepción.
Método de uso.
Ahora veremos cómo usar el procedimiento y el llamado de la ventana, para su perfecto funcionamiento debemos agregar en el
uses de tu form principal la unidad
Aviso que creamos anteriormente, colocaremos el siguiente código en un botón en el form principal:
procedure TForm1.Button1Click(Sender: TObject);
begin
//algo de código
try
//código
except
on E: Exception do
if E.ClassNameIs('EDatabaseError') then
begin
Mostrar('Se produjo un error al intentar conectarse a la base de datos.', E.Message);
Abort;
end;
end;
end;
Esa es una de las tantas formas de capturar una excepción, debe estar encerrado en un
Try...Except para capturar esos errores, aquí una lista de excepciones genéricos de Delphi (también puedes capturar excepciones de componentes):
EAbort: Finaliza la secuencia de eventos sin mostrar el mensaje de error.
EAccessViolation: Comprueba errores de acceso a memoria inválidos.
EBitsError: Previene intentos para acceder a arrays de elementos booleanos.
EComponentError: Nos informa de un intento inválido de registar o renombar un componente.
EConvertError: Muestra un error al convertir objetos o cadenas de texto string.
EDatabaseError: Especifica un error de acceso a bases de datos.
EDBEditError: Error al introducir datos incompatibles con una máscara de texto.
EDivByZero: Errores de división por cero.
EExternalException: Significa que no reconoce el tipo de excepción (viene de fuera).
EIntOutError: Representa un error de entrada/salida a archivos.
EIntOverflow: Especifica que se ha provocado un desbordamiento de un tipo de dato.
EInvalidCast: Comprueba un error de conversión de tipos.
EInvalidGraphic: Indica un intento de trabajar con gráficos que tienen un formato desconocido.
EInvalidOperation: Ocurre cuando se ha intentado realizar una operación inválida sobre un componente.
EInvalidPointer: Se produce en operaciones con punteros inválidos.
EMenuError: Controla todos los errores relacionados con componentes de menú.
EOleCtrlError: Detecta problemas con controles ActiveX.
EOleError: Especifica errores de automatización de objetos OLE.
EPrinterError: Errores al imprimir.
EPropertyError: Ocurre cuando se intenta asignar un valor erroneo a una propiedad del componente.
ERangeError: Indica si se intenta asignar un número entero demasiado grande a una propiedad.
ERegistryExcepcion: Controla los errores en el resigtro.
EZeroDivide: Controla los errores de división para valores reales.
Espero lo disfruten

Saludos.