Hola,
Puedes estar atento al evento OnExcepcion de Application.
Podrías declarar un procedimiento de este modo:
Código Delphi
[-]
procedure ApplicationException(Sender: TObject; E: Exception);
Y, por ejemplo, en el evento FormCreate de tu aplicación asignar el procedimiento al evento correspondiente, algo así:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := ApplicationException;
end;
La implementación del procedimiento ApplicationException sería algo así:
Código Delphi
[-]
procedure TForm1.ApplicationException(Sender: TObject; E: Exception);
begin
ShowMessage('Excepción ' + E.Message);
end;
Respecto de lo que dices de capturar la mayor cantidad de excepciones, no sé muy bien a qué te refieres, pero, ten en cuenta que las excepciones heredan de la clase Exception, o sea, sitúate en un código parecido a este:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Caption := IntToStr( 12 div 0 );
except
on E: Exception do ShowMessage(E.Message);
on E: EDivByZero do ShowMessage(E.Message);
end;
end;
Aunque la excepción que corresponde aquí es EDivByZero, nunca se llegaría a mostrar "su mensaje", puesto que antes precisamos que se capturen excepciones del tipo Exception y este es el más alto en la jerarquía de excepciones, si está bien dicho así.
Lo suyo, pues, sería situar la línea de la excepción EDivByZero antes que la de la de Exception. Por otro lado, si tratas de probar el código anterior, verás que ni siquiera compilará: Delphi reconoce la división por cero y no deja continuar si esto no se arregla antes.
En el libro
La cara oculta de Delphi 4 de
Ian Marteens, el cual puede conseguirse gratuitamente desde su página Web, se tratan las excepciones y la manera de trabajar con estas.
En este propio Foro también se ha tratado en diferentes ocasiones el tema de las excepciones y el modo de trabajar con ellas: solamente echa un vistazo con ayuda del
buscador de los Foros.