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 :

Sortir d'une série de procédures


Sujet :

Langage Delphi

  1. #1
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut Sortir d'une série de procédures
    Bonjour,

    Soit une série de procédures en cascade dont la dernière déclenche un Exit :

    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
    22
    23
    24
    25
    26
    procedure Proc2 ;
    begin
       ...
       ...
       if  ... then Exit;
       ...
       ...
    end ; 
     
    procedure Proc1 ;
    begin
       ...
       ...
       procedure Proc2 ;
       ...
       ...
    end ;
     
    procedure PROCprimaire ;
    begin
       ...
       ...
       procedure Proc1 ;
       ...
       ...
    end ;
    Quelle est la solution la plus élégante pour remonter en amont de la procédure primaire ?

    Merci pour vos suggestions.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    La série doit-elle être obligatoirement des procédures?

    Si non, transformer en function qui renvoit un type booléen.

    Je ne sais pas si c'est la façon la plus élégante mais bon :

    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
     
    function FuncPrimaire: boolean;
    begin
     
      if Func1 then
       begin
     
       end;
     
    end;
     
    function Func1: boolean;
    begin
     
      if Func2 then
       begin
     
       end;
     
    end;

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Si tu veux remonter à ta procédure primaire ça va ressembler à une boucle^^
    Alors se demander si tu peut pas faire ça avec une boucle classique.
    Sinon savoir à quoi ça sert ça peut servir pour trouver une meilleure solution.
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Euh, m'est avis que tu cherches en fait les exceptions.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    Mersi pour votre suggestion :
    Euh, m'est avis que tu cherches en fait les exceptions
    Je suppose qu'il n'y a pas d'autre solution.

    PL

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par paulfr Voir le message
    Bonjour,

    Mersi pour votre suggestion :


    Je suppose qu'il n'y a pas d'autre solution.

    PL
    en fait c'est la meilleur ! là on ça devient compliqué c'est si tu veux définir plusieurs niveau de "remontée"
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par paulfr Voir le message
    Je suppose qu'il n'y a pas d'autre solution.
    Ca pourrait se faire avec quelques lignes d'assembleur. Sur le principe, il suffit de restaurer la pile et de sauter à l'adresse où tu veux reprendre l'exécution.

    Mais d'une part ça implique que tu saches à quel endroit tu veux reprendre. Et d'autre part, tu vas bypasser ainsi l'epilogue des procédures que tu vas courcircuiter, bypasser les finally qu'elles auraient pu définir...
    et de toute façon, maintenant qu'on dispose des exceptions, je ne vois pas l'intérêt de faire une telle chose.

  8. #8
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Aprés avoir utilisé une variable boolénne, ce qui demandait plusieurs étapes ascendantes, j'ai essayé une exception trés simple.
    J'ai eu la surprise d'une solution simple et élegante qui me ramène directement
    au "menu" de mon programme, ce que je cherchais.

    Merci à tous PL

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

Discussions similaires

  1. [XL-2003] Sortir d'une procédure sub au bout d'un certain temps
    Par mancired dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/05/2009, 18h45
  2. Réponses: 0
    Dernier message: 14/05/2008, 20h36
  3. Réponses: 2
    Dernier message: 15/02/2008, 09h09
  4. Réponses: 1
    Dernier message: 14/01/2008, 14h36
  5. Sortir d'une procédure appellante
    Par zooffy dans le forum Access
    Réponses: 2
    Dernier message: 01/06/2006, 16h52

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