Utilisant très rarement les exceptions personnalisées et la propagation de celle-ci d'une procédure à une autre., j'aimerai savoir si je ne fais pas fausse route sur la propagation de ces dernières.

Voici l'exception personnalisée (rien de bien compliquer ^^)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Type EAuthNotFound = class(Exception)
Voici la fonction principale sur laquel je voudrais réceptionner l'exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
procedure MaProcedurePrincipale; 
begin
  Try
     MaProcedureSecondaire 
  Except 
    On E:EAuthNotFound do
    begin
      Showmessage('l''erreur est : ' + E.Message);
    end;
    On E:Exception do
      raise;
  end;
end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
procedure MaProcedureSecondaire;
begin
  try
    if Mafunction then
      Showmessage('Fini');
  Except
    On E:EAuthNotFound do
    begin
      // Est on obligé de faire comme ca pour que cette exception se propage ?
      raise EAuthNotFound.Create(E.Message);
    end;
    On E:Exception do raise;
  end;
end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
function Mafunction : Booelan;
begin
  try
    //récupération d'informations d'un fichier Xml
    Case StrToIntDef((Noeud.Text),-1) of
       -1: Raise EAuthNotFound.Create('No Auth Found'); // erreur
        0: Result := True;
        else
           Result := False;
        end;
    end;
  Except
      on E:EAuthNotFound do
      // Est on obligé de faire comme ca pour que cette exception se propage ?
        raise EAuthNotFound.Create(E.Message);
 
    on E:Exception do
      Raise Exception.Create('Error MaFunction : ' + E.Message);
  end;
end;
J'ai essayé en utilisant un simple Raise, mais l'exception en elle même n'est pas transmise (EAuthNotFound) et passe par le gestionnaire d'exception commun (E:Exception).

Est ce correcte ou existe-t-il une autre solution ?

Merci ^^