IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

[Exception] Comment remonter une exception dans une autre unité ?


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 28
    Points
    28
    Par défaut [Exception] Comment remonter une exception dans une autre unité ?
    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 ?

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Au lieu de mettre ton code dans l'évènement OnCreate, il vaut mieux que tu surcharge le constructeur Create. Cela devrait résoudre ton problème.
    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
     
    interface
    type
      TForm2 = class(TForm)
      ...
      public
        constructor Create(AOwner: TComponent); override;
      ...
      end;
     
    implementation
     
    procedure TForm2.Create(AOwner: TComponent);
    begin
      ChargerFichierIni;
    end;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    c'est pourtant simple...
    Merci, pierre !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/06/2015, 17h52
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo