| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
moebius113 Invitado
|
Publicado: Vie 21 Oct, 2005 8:42 pm Asunto: Atrapar una excepción de error en la apertura de un archivo |
|
|
Hola a todos en el foro, Quisiera saber si alguno sabe como cachar una excepción si ocurre un error al intentar cargar una imagen, como que no se encontro el archivo, algo asi. Se que para eso se utilizan las instrucciones try{}catch(){} pero no se como filtrar el tipo de error (que parametros lleva el catch), si alguien sabe como filtrar este error, se los agradecere de antemano
el código para cargar la imagen es el siguiente
i ="C:\\Images\\"+nomimagen;
frmmenu->Foto->Picture->LoadFromFile(i); |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Vie 21 Oct, 2005 9:36 pm Asunto: |
|
|
Ya que se trata de abrir imágenes podrías utilizar la clase de excepción EInvalidGraphic. En el ejemplo siguiente se utiliza un Tbutton, un OpenPictureDialog y un TImage:
| Código: |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (abrir->Execute()){
try {
Image1->Picture->LoadFromFile(abrir->FileName);
}
catch (EInvalidGraphic &E){
ShowMessage("La extensión del archivo no es correcta.");
}
}
}
|
Donde "abrir" es el nombre del TOpenPictureDialog.
La excepción EInvalidGraphic salta cuando la extensión del archivo gráfico no se reconoce. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
moebius113 Invitado
|
Publicado: Sab 22 Oct, 2005 3:08 am Asunto: Atrapar una excepción de error en la apertura de un archivo |
|
|
Gracias por el consejo, me sirvio mucho tu ejemplo, pero opte por un tipo de excepción más general, como la EFOpenError que se ajusta más a lo que buscaba. Lo que queria era no interrumpir el flujo del programa ante una excepción como esta, por si se borraba por accidente la dirección de el archivo de imagen por ejemplo.
| Código: | if(OPD1->FileName!="")
{
try
{
Foto1->Picture->LoadFromFile(OPD1->FileName);
}
catch(EFOpenError &E) {
ShowMessage("No fue posible abrir la imagen en la dirección "+OPD1->FileName);} |
Ahora lo que necesito es una forma de que solo se muestre mi mensaje de error y no el del sistema, ya que actualmente me manda una excepción del sistema y luego muestra mi mensaje |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 22 Oct, 2005 5:39 am Asunto: |
|
|
Lo mismo pero mas barato, jeje, es decir, con los 3 puntos hacemos que cualquier exepcion que se produzca nos muestre el mensaje.
| Código: | if(OPD1->FileName!="")
{
try
{
Foto1->Picture->LoadFromFile(OPD1->FileName);
}
catch(...) {
ShowMessage("No fue posible abrir la imagen en la dirección "+OPD1->FileName);} |
_________________
 |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Sab 22 Oct, 2005 9:10 am Asunto: |
|
|
El hecho de que te muestre primero el mensaje de error del sistema y luego el tuyo que has puesto en el catch es porque estás compilando desde el entorno de desarrollo, eso es normal, no se porqué, pero es así; Esto no quiere decir que el código necesite cambiarse ya que cuando el programa se ejecute fuera del entorno de desarrollo el mensaje del sistema desaparece y sólamente se muestra tu propio mensaje que has puesto dentro de la estructura catch. Puedes hacer la prueba buscando el archivo ejecutable de tu programa desde el explorador de windows y ejecutarlo con doble click entonces sólo deberá aparecer tu mensaje personalizado. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
moebius113 Invitado
|
Publicado: Sab 22 Oct, 2005 7:15 pm Asunto: |
|
|
| Gracias por los consejos, los pondre en practica lo antes posible |
|
| Volver arriba |
|
 |
|