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 :

Procédure dans une autre unité


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Points : 33
    Points
    33
    Par défaut Procédure dans une autre unité
    Bonjour à tous,

    j'ai une procédure qui se trouve dans une autre unité, j'arrive à l'appeler (j'ai ajouté uses Unit2) dans l'unit1.

    Mais dans cette Procédure, j'ai des références à l'Unit1, et je souhaiterais que ces références soient des variables (c'est à dire remplacer Unit1. par une variable).

    Voila mon code :
    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
     
    Procedure CalculPrix;
    var
      Total1 : String;
      TotalRemise1, TotalRemise2, TotalGeneral : real;
      TempRemise1, TempRemise2 : extended;
      begin
        if Unit1.Edit1.Text <> '0' then
          begin
            TotalRemise1 := StrToInt(Unit1.Edit1.Text) * Total;
            TotalRemise1 := TotalRemise1 / 100;
            TempRemise1 := Total - TotalRemise1;
            Unit1.Label91.Caption := FormatFloat('0.00', RoundTo(TotalRemise1,-2)) + ' €';
          end
          else
            begin
            Unit1.Label91.Caption := '0 €';
            end;
    et je souhaiterai avoir
    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
     
    Procedure CalculPrix;
    var
      Total1 : String;
      TotalRemise1, TotalRemise2, TotalGeneral : real;
      TempRemise1, TempRemise2 : extended;
      begin
        if Nom_de_unit_variable.Edit1.Text <> '0' then
          begin
            TotalRemise1 := StrToInt(Nom_de_unit_variable.Edit1.Text) * Total;
            TotalRemise1 := TotalRemise1 / 100;
            TempRemise1 := Total - TotalRemise1;
            Nom_de_unit_variable.Label91.Caption := FormatFloat('0.00', RoundTo(TotalRemise1,-2)) + ' €';
          end
          else
            begin
            Nom_de_unit_variable.Label91.Caption := '0 €';
            end;
    C'est possible?

    Merci

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    ça m'étonnerait.

    Mais pourquoi ne pas rajouter des paramètres à la fonction pour éviter la référence circulaire ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Enfaite j'ai une procédure qui me permet d'imprimer un devis avec canvas. Et si je veux ajouter des paramètres à la fonction, il va y en avoir vraiment beaucoup… Ce n'est pas un problème?

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    ça peut tenir dans un record, et ça ne fera qu'un seul paramètre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MesParam = record
      Nom: string;
      Longueur: Integer;
      Valeur: Single;
    // .etc.
    end;
     
    procedure Imprime(Params: MesParams);
    begin
      Params.Nom accessible ici

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Parfait, j'ai compris, merci pour ton aide. Je vais faire comme ca

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Attention, tu confond unité et instance de classe. Je suppose que ton unit1 est une TForm, et pas un fichier .pas Delphi (sinon ton label en variable globale est un procédé étrange).
    Ce que tu décrit ici est simplement une methode (procedure d'une classe). Je vais, dans la suite, continuer à parler de unit1, mais je pense qu'il s'agit plutot de form1.
    Tu pourrai passer ton unit1 en parametre :
    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
    Procedure CalculPrix(MyUnit: TForm);
    var
      Total1 : String;
      TotalRemise1, TotalRemise2, TotalGeneral : real;
      TempRemise1, TempRemise2 : extended;
      begin
        if MyUnit.Edit1.Text <> '0' then
          begin
            TotalRemise1 := StrToInt(MyUnit.Edit1.Text) * Total;
            TotalRemise1 := TotalRemise1 / 100;
            TempRemise1 := Total - TotalRemise1;
            MyUnit.Label91.Caption := FormatFloat('0.00', RoundTo(TotalRemise1,-2)) + ' €';
          end
          else
            begin
            MyUnit.Label91.Caption := '0 €';
            end;
    Mais dans ce cas, une methode de classe serait plus adapté, avec Self à la place de MyUnuit
    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
    type
      TForm1 = class(TForm)
      [...]
      Procedure CalculPrix;
     
      end;
     
    [...]
     
    Procedure TForm1.CalculPrix;
    var
      Total1 : String;
      TotalRemise1, TotalRemise2, TotalGeneral : real;
      TempRemise1, TempRemise2 : extended;
      begin
        if Self.Edit1.Text <> '0' then
          begin
            TotalRemise1 := StrToInt(Self.Edit1.Text) * Total;
            TotalRemise1 := TotalRemise1 / 100;
            TempRemise1 := Total - TotalRemise1;
            Self.Label91.Caption := FormatFloat('0.00', RoundTo(TotalRemise1,-2)) + ' €';
          end
          else
            begin
            Self.Label91.Caption := '0 €';
            end;
    ... le "Self" étant facultatif

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

Discussions similaires

  1. Comment appeler une procédure dans une autre unité ?
    Par michel71 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2007, 16h27
  2. Réponses: 9
    Dernier message: 27/10/2005, 18h15
  3. Pb pour se servir d'un tableau dans une autre unité
    Par libititi dans le forum Langage
    Réponses: 7
    Dernier message: 08/06/2005, 11h40
  4. Réponses: 2
    Dernier message: 28/08/2003, 00h00
  5. Reprendre une procedure dans une autre ?
    Par Poisson Rouge dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2002, 22h51

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