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 :

Declaration procedure dynamique


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    Par défaut Declaration procedure dynamique
    bonjour a tous,

    Juste un conseil sur l'écriture de code, je voudrai savoir si il existe une méthode plus compacte d'écrire le code ci dessous.
    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
    27
    28
    29
    30
    31
    32
    33
     
    if ControleSiChargementDll(I)=true then
            begin
               Rack  :=TabBit[TabAdressMesure[I].Rack];
               Panier:=TabBit[TabAdressMesure[I].Panier];
               CarteH:=TabBit[TabAdressMesure[I].CarteH];
               CarteL:=TabBit[TabAdressMesure[I].CarteL];
               case i of
                   001 : begin
                                 generique0001(253,NumMode,Rack,Panier,Carteh,CarteL,TypeCarteAvant,TypeCarteApres,P1,P2,P2,P4,P5, R1,R2,R3,R4,R5,Status);
                         end;
                   002 : begin
                                 generique0002(253,NumMode,Rack,Panier,Carteh,CarteL,TypeCarteAvant,TypeCarteApres,P1,P2,P2,P4,P5, R1,R2,R3,R4,R5,Status);
     
                         end;
                   003 : begin
                                 generique0003(253,NumMode,Rack,Panier,Carteh,CarteL,TypeCarteAvant,TypeCarteApres,P1,P2,P2,P4,P5, R1,R2,R3,R4,R5,Status);
     
                         end;
     
                   ...... jusqu a
     
     
                   254 : begin
                                generique0254(253,NumMode,Rack,Panier,Carteh,CarteL,TypeCarteAvant,TypeCarteApres,P1,P2,P2,P4,P5, R1,R2,R3,R4,R5,Status);
     
                         end;
                   255 : begin
                                generique0255(253,NumMode,Rack,Panier,Carteh,CarteL,TypeCarteAvant,TypeCarteApres,P1,P2,P2,P4,P5, R1,R2,R3,R4,R5,Status);
     
                         end;
               end
             end;
    Le but serai la création dynamique du nom de la procédure 'generiqueN' en fonction du numéro du case, pour supprimer le case.

    Par exemple à la méthode de 'Findcompent' où l'on peut numéroter les composant pour les passer dans une boucle...
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    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 448
    Points
    28 448
    Par défaut
    oui, il suffit de créer un tableau de procédures

    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
     
    type
      TProc = procedure(parms...);
     
    procedure proc_001(params..);
    begin
    end;
     
    procedure proc_002(params...);
    begin
    end;
     
    const
      Procs:array[1..2] of TProc = (
        proc_001, proc_002
      );
     
    begin  
      Procs[i](params...);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Voir aussi les méthodes publiées et MethodAddress comme dans le sujet
    Créer un jeu d'aventure textuel
    Appel d'une fonction/TThread de façon paramétrique

    La proposition de Paul TOTH sur un tableau de procédure a aussi été exploité dans le sujet
    Déclaration de pointeur de fonction et structure
    Le Tableau a l'avantage que dès la compilation les appels de fonctions respecterons le même prototype contrairement à une version RTTI où plus de surprises peuvent débarquer en RunTime !

    petit rappel sur les booléens
    if ControleSiChargementDll(I)=true then ou if ControleSiChargementDll(I) then sont équivalents mais la seconde est la forme recommandée !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    j'ai jamais eu 256 procédure dans une seul unité
    est ce que tout ces procédure sont radicalement différent, ou simplement quelques lignes?
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #5
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Pour supprimer le case, il suffit de créer une procédure "generique" avec les paramétres nécessaires a "generiqueXXX" plus un parametre index.
    Suivant la complexite, soit conditionner la procedure "generique", soit déporter le case a l'interieur de celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ControleSiChargementDll(I) then
    begin
      Rack  :=TabBit[TabAdressMesure[I].Rack];
      Panier:=TabBit[TabAdressMesure[I].Panier];
      CarteH:=TabBit[TabAdressMesure[I].CarteH];
      CarteL:=TabBit[TabAdressMesure[I].CarteL];
      generique(I, 253,NumMode,Rack,Panier,Carteh,CarteL,TypeCarteAvant,TypeCarteApres,P1,P2,P2,P4,P5, R1,R2,R3,R4,R5,Status);
    end;
    Akim Merabet

  6. #6
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Qu'est ce qui diffère dans l'implémentation des 256 procédures ?

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Je ne sais pas si vous avez remarqué, mais petitcoucou31 n'a même pas répondu à nos propositions !
    On ne sait même si nos réponses lui ont convenu ou pas ! on ne sait même pas si ils nous a lu !

    Mais, je suis d'accord qu'un refactoring est peut-être (surement) utile !

    Sinon, j'ai déjà ce type de structure pour la lecture d'un fichier (Format NX de la CCAM), pour chaque type de ligne, il fallait lire et traiter les données lues d'une façon différentes, le fichier alimentait près de 20 tables dans la DB pour un modèle relationnel exploitable dans l'application
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [ASE 15.0.2] Procedure dynamique introuvable
    Par MartyMacFly dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 25/02/2009, 16h44
  2. Lancer procedure dynamiquement.
    Par Junior_jef dans le forum Access
    Réponses: 11
    Dernier message: 04/05/2006, 19h26
  3. champ dynamiques dans une procedure stockée
    Par augereau dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/11/2005, 07h52
  4. Réponses: 6
    Dernier message: 24/09/2004, 13h10
  5. Declaration Type ds une procedure
    Par Qwazerty dans le forum Langage
    Réponses: 6
    Dernier message: 28/08/2002, 09h09

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