Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duda Sobre Excepciones - Propagar Excepciones entre los formularios (https://www.clubdelphi.com/foros/showthread.php?t=66551)

Neeruu 25-02-2010 19:09:36

Duda Sobre Excepciones - Propagar Excepciones entre los formularios
 
Hola a todos....

Tengo algo que no me esta saliendo como quiero ...

Tengo esta situación, en una aplicación MDI

Se inicia la aplicación, se crea el formulario principal.

En el OnCreate del Formulario Principal (FrmMDIMain), llama a otro formulario (FrmMDIChild)

Código Delphi [-]
  try
    Try
      FrmMDIChild := TFrmMDIChild.Create(Self);
      if FrmMDIChild.ShowModal = mrCancel then
        Raise Exception.Create('Usuario No Autorizado');
    except
      On E:Exception do
        begin
          Application.ShowException(E);
          Application.Terminate;
        end;
    end;
  finally
    FrmMDIChild.Close;
  end;

Ahora en el OnCreate de FrmMDIChild llamo a una funcion

Código Delphi [-]
  if Not (MyFuncion = True) then
    raise exception.Create('No se puede Conectar con la Base de Datos.' +
      #13 + #10 + 'La aplicación se Cerrará.');

Mi Pregunta es:

Porque el Try Except del FrmMDIMain... no captura la Excepción del FrmMDIChild.
Que es lo que hace?... Me muestra el mensaje de la Excepción

Código Delphi [-]
    raise exception.Create('No se puede Conectar con la Base de Datos.' +
      #13 + #10 + 'La aplicación se Cerrará.');

y despues se Ejecuta me muestra el FrmMDIChild, por lo tanto se ejecuta la linea:

Código Delphi [-]
    if FrmMDIChild.ShowModal = mrCancel then
        Raise Exception.Create('Usuario No Autorizado');

Ahora lo que necesito es saber como capturar, o generar una excepción... que le avise al try except del FrmMDIMain que se produjo un error en la creación del FrmMDIChild y que debe saltar por el except.

Espero se entienda.

Saluda Atte Neeruu!!!:)

Neftali [Germán.Estévez] 26-02-2010 10:18:50

¿Porqué no subes el proyecto de ejemplo, que le echemos un vistazo?
Así será más fácil.

AzidRain 26-02-2010 20:36:50

Me parece que sale sobrando la excepción, pues bien podrías hacer:
Código Delphi [-]

 FrmMDIChild := TFrmMDIChild.Create(Self);
 try
      if FrmMDIChild.ShowModal = mrCancel then
      Begin
          ShowMessage('Usuario no Autorizado');
          Application.Terminate;
       end;
  finally
    FrmMDIChild.Close;
  end;

Recuerda que las excepciones no se deben utilizar para mandar mensajes o controlar flujo del programa, te recomiendo le eches una hojeada al capítulo de excepciones del libro "La cara oculta de Delphi" de Ian Marteens, que aunque es para versiones antiguas de delphi sirven bastante para entender esto de las excepciones.


La franja horaria es GMT +2. Ahora son las 17:54:12.

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