[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.
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:
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
Parametre procedure ou fonction
Je précise que je programme Lazarus sous Linux (Ubuntu Debian). Pierre.
Paramètre procedure ou function
Grand merci de ta réponse qui résoud totalement mon problème. Pierre.