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

Lazarus Pascal Discussion :

[Lazarus] Paramètre de type procedure ou function


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Points : 16
    Points
    16
    Par défaut [Lazarus] Paramètre de type procedure ou function
    Bonjour,
    Sous Delphi, le passage du nom d'une procedure ou function en paramètre dans une méthode ou procedure se fait sans problème particulier (par exemple la méthode sort de la classe Tlist fonctionne avec en paramètre une fonction de comparaison (type function(item1,item2:pointer):integer ). Or ces passages de paramètre procedure ne fonctionnent pas de la même façon sous Lazarus: A chaque fois j'ai une erreur de mauvais nombre de paramètres !... Pourtant la même méthode sort est référencée en Free Pascal (lazarus), mais on tombe sur cette erreur. ??? Merci de votre aide. Pierre.

  2. #2
    Membre éclairé

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Points : 773
    Points
    773
    Par défaut
    Peux tu poster le bout de code exact?

    Je viens de faire un test simple avec une fonction en paramètre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function compare(i,j : integer): boolean;
    begin
    result :=(i>j);
    end;
     
    function AdditionneSiOui(a,b :integer;Oui :boolean): integer;
    begin
    if oui then result := a+b else result :=a-b;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     showmessage(inttostr(AdditionneSiOui(10,20,compare(10,20))));
    end;
    Celà semble marcher sans problème...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Paramètre procedure ou function
    Merci de ta réponse rapide. Cependant l'exemple que tu me donnes ne correspond pas à mon problème car tu n'as pas de passage de procedure ou function en paramètre (seulement un boolean). Voici donc un petit programme où on veut passer en paramètre une function de type Function1. Cela fonctionne parfaitement sous Delphi, mais pas sous Lazarus (j'ai des messages d'erreur: "Wrong number of parameters specified").

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    unit Unit1; 
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons;
     
    type
      Fonction1=function(x:integer):integer;
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end; 
     
    var
      Form1: TForm1; 
     
    implementation
     
    function triple(x:integer):integer;
    begin
      result:=3*x;
    end;
     
    function decuple(x:integer):integer;
    begin
      result:=10*x;
    end;
     
    procedure afficheRes(f:Fonction1;x:integer);
    begin
      showMessage(intToStr(f(x)));
    end;
     
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      AfficheRes(triple,7);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      AfficheRes(decuple,7);
    end;
     
    initialization
      {$I unit1.lrs}
     
    end.

    Pierre

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Parametre procedure ou fonction
    Je précise que je programme Lazarus sous Linux (Ubuntu Debian). Pierre.

  5. #5
    Membre éclairé

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Points : 773
    Points
    773
    Par défaut
    ok, j'étais hors sujet...

    Il faut, avec Lazarus, passer en paramètre l'adresse de la fonction pour que celà marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var x :integer;
    begin
    AfficheRes(@triple,7);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    AfficheRes(@decuple,7);
    end;
    Bonne continuation...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Paramètre procedure ou function
    Grand merci de ta réponse qui résoud totalement mon problème. Pierre.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/07/2012, 09h06
  2. [procedure stockée] paramètre de type Curseur
    Par couetbis dans le forum JDBC
    Réponses: 2
    Dernier message: 10/07/2007, 10h29
  3. [ADO] Passage de paramètre de type Date dans une requête
    Par e-ric dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/01/2006, 12h36
  4. Conversion string -> type procedure
    Par ludovic tambour dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2005, 19h53
  5. Récupération des paramètres avec une procedure stockée
    Par samlerouge dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2004, 22h00

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