Hola Jac.
El problema del uso que haces de try except; es que puede enmascarar errores y eso conlleva a dolores de cabeza.
Voy a usar un ejemplo infantil, pero va a servir para el caso.
Suponé que tenemos Form2 creado desde Form1 así:
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Application.CreateForm(TForm2,Form2);
Form2.ShowModal;
except
Form2.Free;
end;
end;
Y en el evento OnCreate del Form2:
Código:
procedure TForm2.FormCreate(Sender: TObject);
begin
LineaQueCausaUnaExcepción;
end;
La excepción es detectada por except en Form1, la memoria ocupada por Form2 es liberada, el form no se muestra,
seguimos en Form1, pero... ¿ que pasó? ¿ por que no se muestra Form2 ?
Hemos metido la pata hasta el cuadríl y nadie nos dice por qué.
Sucede que capturamos la excepcion antes del ciclo de mensajes.
Ya existe un try/except en el ciclo de mensajes, y se muestra con Application.ShowException, abortando el mensaje.
Esto no pasa con el uso de finally; elevándonos la excepcion y avisándonos lo que pasa.
Este ejemplo es muy trivial, pero lo cierto es que detectar un error en una aplicación grande, suele ser complicado,
aún con los mensajes de excepción.
Saludos.