Ejecutables sin mensajes de excepcion
Hola. Utilizo Delphi 5 y componentes de terceros en mis aplicaciones (SuiPack, Fast Report, etc).
Me gustaría que todos los posibles mensajes de excepción que yo no tenga controlados, en sus respectivos bloques try-except, no aparezcan al usuario por pantalla. Para ello, incluyo en mi formulario principal un componente "ApplicationEvents" y le escribo el método OnException, que se supone que tomará aquellas excepciones que no han sido manejadas anteriormente, y vuelco el mensaje de excepción a un fichero de log para posteriormente analizarlo. El problema es que aún así, siguen saliendo mensajes de excepción en pantalla y en inglés, del tipo "Violación de acceso.." etc. Me gustaría que no saliera ninguno, que para eso tengo el manejador global de excepciones. Pero nada, siguen saliendo a veces, provocados por estos componentes añadidos de mi aplicación (fast report, etc). ¿Como puedo hacer para bloquearlos todos? Los mensajes que se muestran al usuario sólo los quiero dar yo. Salu2. |
Yo lo que suelo hacer es. en cada uno de los Funciones o procedimientos que realizo manejo el Try Except, de manera que si el error es lanzado por alguna funcion que se llama desde dicho procedimiento o funcion que de siempre contenido.
Porque muchas veces el error no se genera en la aplicacion principal y si en algun objecto o componente del proyecto. |
Aún así, siguen saliendo. Por ejemplo, si la vista previa de fast report da un mensaje de error, aunque ponga el try except el mensaje sale.
|
Lo más seguro sea que el mensaje se muestre porque en el código de los componentes está así escrito. Quiero decir, que no sean mensajes de excepción, sino que, por ejemplo, deteca algún fallo y lo muestre.
Aquí un ejemplo, para aclarártelo. Tengo un TEdit donde hay que escribir un código de barras (realmente no lo tengo, es para el ejemplo), y claro, en un cod de barras solo hay números, así que no permito que escriban letras, pues en el evento OnKeyPress pongo esto
Si es eso, la única solución es modificar el código fuente de esos componentes :( , o bien usar otros (a ser posible, claro). |
Hola sur-se, y hola a todos:
Cita:
Cita:
Ante estos, lo único que se puede hacer es no usar dichos componentes. Cita:
Saludos. :) |
Hola.
No parece que el problema vaya por ahí, pues he revisado los fuentes de los componentes adicionales que uso (eso es lo bueno de comprar componentes con fuentes) y no hay showmessage por ningún sitio. Sólo raise y similares. Parece que el ApplicationsEvents.OnException no los toma todos. No quiero dar al usuario mensajes del tipo "Access Violation ... 9f93438.." ni similares que no le sirven para nada. Eso los quiero guardar en un log y luego yo los analizo. Salu2. |
Lo solicitado son los componentes gratuitos LMDTOOLS SE, en su Application.OnException trae un parámetro Cancel para eso mismo.
Otra cosa es que esté de acuerdo con su uso... ;) Saludos |
Hola,
Cita:
No manejar las excepciones para las que no tienes una solución... Otra vez más: No manejar las excepciones para las que no tienes una solución... Otra, otra vez más: No manejar las excepciones para las que no tienes una solución... Vale. A ver si se te queda para cuando sea menester. Gracias Juan Antonio. :) |
Yo he leído esto muchas veces desde ayer y todavía no acabo de digerirlo. Supongo que tiene toda la razón pero todavía no me queda claro. En el caso del MaskEdit que menciona sí lo veo claro pues el mentado componente no da oportunidad de interceptar la excepción que provoca la validación de manera que para alterar su comportamiento sólo queda derivar una nueva componente.
Seguire meditándolo :) // Saludos |
Solo por cuirosidad... ¿estas segur@ que no estas viendo los mensajes de excepción dentro del propio IDE?
Esto porque normalmente, mientras estas ejecutando una aplicación desde el IDE, este captura primero las excepciones y te las muestra, a menos que hayas decidido ignorar algunos tipos de excepción o ignorarlas todas en Tools/Debugger Options/Language Exceptions (<= d7) o en Tools/Options/Debugger Options/Borland Debugers/Language Exceptions (>= d2005) Hasta luego. ;) |
Hola. Claro que no. Yo lo utilizo en tiempo de diseño para detectar los errores.
Cuando me refiero a mensajes "no controlados" es en el ejecutable final fuera del Delphi. En el código de mi programa manejo todas las posibles excepciones con bloques try-except y try-finally según corresponda. Respecto a ignorar los errores y si salen que el cliente los vea, pues no estoy nada de acuerdo. Prefiero que el cliente, en vez de ver el mensaje "Access Violation 98:4feef94...", vea un mensaje en una pantalla más bonita con botones de notificar la incidencia por email o por fax, etc y un texto del tipo "Se ha producido un error inesperado. Póngase en contacto con bla. ... para notificar la incidencia", o bien loggear el error a un fichero para analizarlo posteriormente. Creo que queda mucho mejor ya que ese mensaje en inglés no aporta nada al cliente. El problema como digo es que aún teniendo el manejador global ApplicationEvents.OnException, no sé porque consigue salir antes la ventana de errores de windows. Salu2. |
La franja horaria es GMT +2. Ahora son las 15:28:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi