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é-utilisation de fonctions et de procédures


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut ré-utilisation de fonctions et de procédures
    Bonjour,

    j'ai dans un programme un certains nombre de fonction que j'utilise dans plusieurs Unit à la fois. Malheureusement, même si l'autre Unit est dans la liste des Uses, je ne peut pas utiliser une fonction située dans l'Unit1 dans l'Unit2.

    J'ai donc pensé à créer une Unit à part dans laquelle je mettrais mes fonctions et procédure que j'utilise souvent mais je n'arrive pas à les utiliser dans mon programme.

    Après qques pages de recherches non fructueuses sur Google et le forum, je me suis dit que ce problème n'était pas encore abordé (ou trop simple à résoudre oO)

    Merci d'avance pour les réponses.

    All the best,

    z.e.k

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Pour des références croisées (à éviter en principe), si Unit1 reférence unit2 et si unit2 référence unit1, mettre dans Unit2 la clause "uses Unit1" dans la section implémentation de unit2 (et non dans la section interface).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Par défaut
    Tes procedures ou fonctions doivent être déclarées dans la section
    interface de ton unit2 ,et implémentées dans la section implémentation
    tu pourras alors les voir depuis to unit1

    A+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut
    Re,

    merci pour vos réponses, mais j'ai encore du mal à me représenter comment le faire

    Peut être qu'un exemple m'aidera un petit peu plus :

    Unit1.pas :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    {------------------------------------------------------------------------------}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
         with TEdit.Create(self) do
              begin
                   Name := 'Edit1';
                   Parent := Form1;
              end;
    end;
     
    {------------------------------------------------------------------------------}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         get_edit('Edit1').Free;
    end;
     
    {------------------------------------------------------------------------------}
     
    end.
    Unit2.pas

    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 Unit2;
     
    interface
     
    uses
        StdCtrls, Unit1;
     
    implementation
     
    uses Unit1;
     
    {------------------------------------------------------------------------------}
     
    function get_edit(nom: string): TEdit;
     
    begin
         Result := Tedit(Form1.FindComponent(nom) as TEdit);
    end;
     
    {------------------------------------------------------------------------------}
     
    end.
    Lorsque je compile, il me dit que get_edit n'est pas déclaré.

    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Par défaut
    C'est au unit1 de faire appel à l'unit2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls,unit2;
     
    ....
    et tu dois déclarer ta fonction get_edit dans la section interface

    et laisser l'implémentation dans la section implémentation

    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
     
     
    unit Unit2;
     
     
    uses
        StdCtrls; //Unit1;
     
     
    interface
     
     
    function get_edit(nom: string): TEdit;
     
     
    implementation
     
    //uses Unit1;
     
    {------------------------------------------------------------------------------}
     
    function get_edit(nom: string): TEdit;
     
    begin
         Result := Tedit(Form1.FindComponent(nom) as TEdit);
    end;
     
    {------------------------------------------------------------------------------
    A+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Par défaut
    Ca fonctionne

    Merci beaucoup !!

    A+

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

Discussions similaires

  1. [ASP] Utiliser la fonction PAD
    Par Hell dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 17h23
  2. manuel d'utilisation de fonction
    Par SteelBox dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/10/2004, 02h28
  3. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 16h43
  4. Réponses: 11
    Dernier message: 22/12/2003, 22h06
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 16h04

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