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

 Delphi Discussion :

Réutiliser une procédure


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut Réutiliser une procédure
    Bonsoir tous le monde,

    J'ai une procédure qui est utilisé sur 3 feuilles différentes. C'est exactement la même donc je voudrais l'avoir une seule fois et ensuite juste l'appeler.

    Dans cette procédure, il y a des .text et des .visible ... et je ne sais pas comment faire la procédure :s

    Voilà un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If trouve then
     Begin
      gb_coord.Visible:=true;
      gb_gene.Visible:=true;
      za_nom.Visible:=true;
      zs_nom.Visible:=true;
      ...
    je ne sais pas comment gérer cela.

  2. #2
    Membre éclairé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 780
    Par défaut
    Bonjour.

    Facile ......... quand on sait !

    C'est néamoin simple. Commence par créer une Unité. Voici ce qui apparaît

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unit Unit1;
     
    interface
     
    implementation
     
    end.
    Ajoute du code pour arriver à ceci

    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
    unit Unit1;
     
    uses
      SysUtils, Variants, Classes;   // j'ai mis au hasard
     
    Type
        TFonction = class(TApplication)
     Private
     
     Public
     
    end;
     
    Var
       Fonction : TFonction;     // le nom est au choix
     
    implementation
     
    uses    // si tu en as besoin
     
    end.
    Enregistre, par exemple sous le nom de MesFontions.

    Ensuite tu peux créer ce que tu veux. Voici un exemple

    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
    unit MesFonctions;
     
    uses
      SysUtils, Variants, Classes;
     
    Type
        TFonction = class(TApplication)
     Private
     
     Public
          function Calcul(var Montant : real; Origine : integer) : boolean;
    end;
     
    Var
       Fonction : TFonction;
     
    implementation
     
    uses  //  ce dont tu as besoin
     
    function TFonction.Calcul(var Montant : real; Origine : integer) : booelan
    begin
        if Origine = 0 then
           Result := false
        else  begin
     
            Montant := 1485/Origine;
            Result := true;
       end;
    end;
    end.
    Et dans tes fenêtres tu ajoutes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .
    ..
    uses MesFonctions,......;
    .
    .
    .
       Test := Fonction.Calcul(Montant,Diviseur);
    .
    .
    .
    Tu peux alors ajouter autant de sous-fonctions que tu veux dans MesFonctions. En revanche pour voir ton code de MesFonctions, passe par Fichier/Ouvrir.

    Bon code et Bon weekEnd

  3. #3
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Euh On va reprendre depuis le début parce que presque tout ce qui a été dit est faux/inadapté. Désolé.

    Le problème initial et profond est que, le gb_coord d'une form n'est pas le gb_coord d'une autre. Ce n'est pas parce que leur nom est le même que l'entité est la même.

    Autrement dit, des deux procédures ne sont pas les mêmes. Elles prennent la même forme textuelle, mais pas la même forme compilée.

    Il y a deux moyens de résoudre ce problème. Un propre et délicat à mettre en place si ton appli est fort avancée. Un pas propre mais faisable en 3 minutes.

    La solution pas propre est de récupérer tes composants à partir de leur nom vraiment (propriété Name), et donc utiliser FindComponent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure DoSomething(Form: TForm; Trouve: Boolean);
    begin
      if Trouve then
      begin
        (Form.FindComponent('gb_coord') as TControl).Visible := True;
        (Form.FindComponent('gb_gene') as TControl).Visible := True;
        (Form.FindComponent('za_nom') as TControl).Visible := True;
        (Form.FindComponent('zs_nom') as TControl).Visible := True;
      end;
    end;
    La solution nettement plus propre est de construire ta fiche par héritage (les 4 composants concernés seront dans la fiche parente) ou avec une frame (cadre).
    Si tes 4 composants forment un groupe sémantique logique, tu peux créer un cadre les contenant, et ce cadre possèdera la méthode DoSomething. Ensuite, il suffira de placer ce cadre sur tes deux fiches.

    Par héritage, euh... Ce sera casse-gueule si tu ne maîtrise pas encore le reste. Perso, je n'ai jamais utilisé l'héritage de fiches, parce que c'est tellement plus difficile à gérer, et que les cadres peuvent souvent proposer une solution plus simple.
    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.

  4. #4
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Je te remercie pour ta réponse, l'héritage, je connais mais avec l'objet.

    Je vais prendre la "pas propre" comme solution.

    Tu dit qu'il faut reprendre dès le début ... mais jusqu'où lol, dans la nouvelle unité créée, je ne déclare pas comme ci dessus, je passe directement à la procédure c'est cela ?

  5. #5
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Je n'y suis toujours pas parvenue
    Peut on mieux m'expliquer la dernière solution car là je tourne en rond

  6. #6
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Tu fais une unité Common.pas avec :
    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
    unit Common;
     
    interface
     
    uses
      Classes, Forms;
     
    procedure DoSomething(Form: TForm; Trouve: Boolean);
     
    implementation
     
    procedure DoSomething(Form: TForm; Trouve: Boolean);
    begin
      if Trouve then
      begin
        (Form.FindComponent('gb_coord') as TControl).Visible := True;
        (Form.FindComponent('gb_gene') as TControl).Visible := True;
        (Form.FindComponent('za_nom') as TControl).Visible := True;
        (Form.FindComponent('zs_nom') as TControl).Visible := True;
      end;
    end;
     
    end.
    Et dans tes événements de boutons tu appelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoSomething(Self, Trouve);
    Tout en ayant bien sûr ajouté Common aux uses des deux unités qui définissent tes forms.
    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.

  7. #7
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Excusez moi mais ça ne marche pas ...

    Sur la première ligne comme toutes les autres, il y a un problème ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Form.FindComponent('gb_coord') as TControl).Visible := True;
    Delphi me dit que Tcontrol et visible ne sont pas déclarés.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2012, 13h45
  2. Réponses: 8
    Dernier message: 31/05/2011, 09h43
  3. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  4. Réutiliser une procédure stockée dans une vue
    Par pgagne dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2007, 10h59
  5. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30

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