Question

Est-il possible d'utiliser des enregistrements en tant que paramètre de méthode et de les appeler sans déclarer implicitement une instance dudit enregistrement?

J'aimerais pouvoir écrire du code comme celui-ci.

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);

puis appelez la méthode comme ceci ou quelque chose de similaire.

Foo([('Button1', TButton), ('Lable1', TLabel)]);

En passant, je suis toujours bloqué sur Delphi 5.

Était-ce utile?

La solution

Oui. Presque.

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

function r(i: string; c: TClass): TRRec;
begin
  result.ident     := i;
  result.classtype := c;
end;

procedure Foo(AClasses : array of TRRec);
begin
  ;
end;

// ...
Foo([r('Button1', TButton), r('Lable1', TLabel)]);

Autres conseils

Il est également possible de travailler avec un tableau const, mais il n’est pas aussi flexible que la solution donnée par "gangph": (surtout que vous devez donner la taille ([0..1]) du tableau dans la déclaration du tableau. Les enregistrements sont anonymes, le tableau ne l’est pas).

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);
begin
end;

const tt: array [0..1] of TRRec = ((ident:'Button1'; classtype:TButton),
                                   (ident:'Lable1'; classtype:TLabel));

Begin
  Foo(tt);
end.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top