J'ai voulu implémenter une gestion d'exception au cas ou mes fichiers seraient effacés.

Soit une première fiche TForm1 qui créée une instance de TForm2. Cette fiche TForm2 appelle dans son évènement FormCreate une procédure ChargerFichierIni suceptible de déclencher une exception. Je souhaite que cette exception soit gérée par la 1ère routine appelante TForm1.FormCreate mais ça ne marche pas.

L'exception que je déclenche fonctionne comme si je n'avais pas implémenter de gestion d'exception dans TForm1.FormCreate ce qui fait planter le reste du programme !

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 TForm1.FormCreate(Sender: TObject);
begin
  try
    FFiche2 := TForm2.Create(Self);
    try
      { ... procedures Suivantes ... }
    finally
      FFiche2.Free;
    end;
  except
    on E: EInOutError do
      ShowMessage(E.Message);
  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
 
{ Chargement du fichier .ini }
procedure TForm2.ChargerFichierIni;
var
  Fini: TiniFile;
begin
  FIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
  try
    if FileExists(FIni.FileName) then
      { Procédures }
    else
      raise EInOutError.Create('Fichier introuvable !');
  finally
     FIni.Free;
  end;
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
    ChargerFichierIni;
end;

Si j'appelle directement 'ChargerFichierIni' sans passer par TForm2.FormCreate, l'exception remonte bien dans l'appelant mais ce n'est pas le comportement que je veux.

J'ai aussi implémenter ma gestion d'exception dans TForm1.FormCreate ce qui fonctionne aussi, mais comment informer ma fiche appelante que le fichier n'est pas disponible ?

Comment faire remonter une exception dans TForm1 en passant par le constructeur ou les évènements de TForm2 ?