No hace falta comprar nada.
Pon un ApplicationsEvents en tu ventana principal. En el evento OnException, puedes programar lo que quieras. Dentro del evento haz un showmessage de E.Message
Ahora en tus rutinas tienes 3 opciones mutuamente excluyentes:
1.- No poner bloques try..excepts, de forma que al ocurrir una excepción, ésta llegue al componente ApplicationsEvents.OnException en el que has programado lo que quieras hacer.
2.- Usar bloques try ... excepts, pero permitir que dicha excepción se lance de nuevo.
Típico caso, en la rutina haces un rollback de la transacción y después en el Application.OnException muestras el mensaje al usuario:
Código Delphi
[-]
procedure mirutina;
begin
try
trans.StartTransaction;
qryRestarStocks.ExecQuery; trans.Commit;
except
begin
trans.Rollback; raise; end;
3.- Usamos bloques try ... except, pero nos comemos la excepción.
No llegará al Application.OnException. No se mostrará ningún mensaje al usuario.
Código Delphi
[-]
procedure mirutina;
begin
try
trans.StartTransaction;
qryRestarStocks.ExecQuery; trans.Commit;
except
begin
trans.Rollback; end;
Saludos